110,534
社区成员
发帖
与我相关
我的任务
分享
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
Console.WriteLine("Send Message");
c.Send(bs, bs.Length, 0);//发送测试信息
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
public int Receive(byte[] buffer, int length) {
if (!m_isConnect) {
return -1;
}
int readed = 0;
int ret = 0;
try {
do {
ret = m_client.Receive(buffer, readed, length - readed, SocketFlags.None);
if (ret <= 0) {
Log.InfoFormat(this, "remote closed");
Close();
return -1;
}
readed += ret;
} while (readed < length);
} catch (Exception ee) {
Log.Error(this, ee);
Close();
return -1;
}
return readed;
}
使用方法:
public T Receive<T>() where T : struct {
byte[] buffer = new byte[4];
int ret = Receive(buffer, buffer.Length);
if (ret <= 0) {
return default(T);
}
int length = BitConverter.ToInt32(buffer, 0);
buffer = new byte[length];
ret = Receive(buffer, length);
if (ret <= 0) {
return default(T);
}
return buffer.BytesToStruct<T>();
}
以上是基于Length Type Data方式完成