C# socket 异步接收 问题
各位大神:
C# 写的异步客户端的接收回调
public void readCallback(IAsyncResult ar) {
StateObject state = (StateObject) ar.AsyncState;
Socket handler = state.WorkSocket;
int read = handler.EndReceive(ar);
if (read > 0) {
state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,read));
handler.BeginReceive(state.buffer,0,StateObject.BufferSize, 0,
new AsyncCallback(readCallback), state);
} else {
if (state.sb.Length > 1) {
string content = state.sb.ToString();
Console.WriteLine("Read {0} bytes from socket.\n Data : {1}",
content.Length, content);
}
}
}
问题如下:如果服务端发送过来的数据没有自定义的包头和包尾,长度不定,且缓冲区设置小于接收包长度,也就是需要再次或多次读取,怎么保证读取的数据完整和不重复?
求思路和方法,多谢指点感激不尽。
C# 写的异步客户端的接收回调
public void readCallback(IAsyncResult ar) {
StateObject state = (StateObject) ar.AsyncState;
Socket handler = state.WorkSocket;
int read = handler.EndReceive(ar);
if (read > 0) {
state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,read));
handler.BeginReceive(state.buffer,0,StateObject.BufferSize, 0,
new AsyncCallback(readCallback), state);
} else {
if (state.sb.Length > 1) {
string content = state.sb.ToString();
Console.WriteLine("Read {0} bytes from socket.\n Data : {1}",
content.Length, content);
}
}
}
问题如下:如果服务端发送过来的数据没有自定义的包头和包尾,长度不定,且缓冲区设置小于接收包长度,也就是需要再次或多次读取,怎么保证读取的数据完整和不重复?
求思路和方法,多谢指点感激不尽。
...全文
相关推荐
C# socket通信项目,实现了实现了心跳、断线重连、服务端异步接收数据、消息回调反馈、解决了粘包相关问题,可以多客户端
C# socket通信(免积分下载),本项目有三个部分:1、客户端(winform);2、服务端(winform);3、socket功能类库模块(其他项目也可以引用),socket类库模块功能齐全,只需调用其中方法即可,复用性较强,代码注释详细,实现了心跳,解决了粘包问题,异步发送接收数据,等等,bin目录下右运行日志方便查找程序运行状况,可以有多个客户端发送消息,服务端可以广播消息也可以定向发送给某个客户端
C# 基于socket实现的异步TcpServer和TcpClient
C#编写的TCP异步通信,采用Socket实现,(还可用C#对Socket的封装TcpClient和TcpListener实现) 包含服务端及客户端完整代码
Socket异步接收、调试
可用于Socket异步接收和报文调试,使用C#开发,运行需要.Net Framework库。
C#socket异步发送与接收类
实现SOCKET异步网络传输 包含发送、接收、事件
socket异步和同步使用
参考了许多大侠的代码,才写出来东东,没对数据做校验,希望给正在研究这方的东东的人一点参考.里面包含文件以及DataTable传输等


