首先:服務(wù)端要發(fā)四個(gè)字節(jié)過(guò)來(lái),代表接下來(lái)他發(fā)了多少數(shù)據(jù)過(guò)來(lái),然后每次客戶端就讀這個(gè)長(zhǎng)度的數(shù)據(jù)即可。這樣收發(fā)就同步了哈哈!
然后:客戶端就按照這個(gè)長(zhǎng)度來(lái)讀服務(wù)端一次發(fā)過(guò)來(lái)的信息。
還要解決一個(gè)問(wèn)題就是 socket接收信息由字節(jié)轉(zhuǎn)換成整型:
Byte[] RecNum = new byte[4];
int iRevNum = netstream.Read(RecNum, 0, RecNum.Length);//讀取客戶發(fā)送來(lái)的字節(jié)信息。
int i = BitConverter.ToInt32(RecNum, 0);
i = System.Net.IPAddress.NetworkToHostOrder(i);
接下來(lái)就按i這么大來(lái)讀信息就能同步了。具體代碼見(jiàn)下:(網(wǎng)元監(jiān)控中使用)
private void Read()
{
try
{
Byte[] Recp = new byte[1024];
if (ClientSocket == null)
{
return;
}
NetworkStream netstream = new NetworkStream(ClientSocket);
int iRevp = netstream.Read(Recp, 0, Recp.Length);//讀取客戶發(fā)送來(lái)的信息。
string strRevp = System.Text.Encoding.GetEncoding("gb2312").GetString(Recp, 0, iRevp);
if (strRevp.IndexOf("請(qǐng)輸入指令") != -1)
{
string sendMsg = "";
if (curPort.Equals("ALL"))
{
sendMsg = "track " + curNet.NeENName + "\r\n";
}
else
{
sendMsg = "track " + curNet.NeENName + "#" + curPort + "\r\n";
}
DispatchMessage(sendMsg);
}
while (true)
{
try
{
Byte[] RecNum = new byte[4];
int iRevNum = netstream.Read(RecNum, 0, RecNum.Length);//讀取客戶發(fā)送來(lái)的字節(jié)信息。
int i = BitConverter.ToInt32(RecNum, 0);
i = System.Net.IPAddress.NetworkToHostOrder(i);
Byte[] Rec = new byte[i];
int iRev = netstream.Read(Rec, 0, Rec.Length);//讀取客戶發(fā)送來(lái)的信息。
string strRev = System.Text.Encoding.GetEncoding("gb2312").GetString(Rec, 0, iRev);
strRev = strRev.Replace("\0", "");
ProcessReceiveData(strRev);
}
catch (Exception ex)
{
;
}
Thread.Sleep(1000);
}
}
catch (Exception ex)
{
;
}
}
posted on 2010-01-07 11:34
天書(shū) 閱讀(972)
評(píng)論(0) 編輯 收藏 引用