求指导!!!!C# socket 同一条数据接收多次 导致其他数据丢失

客户端从数据库里取出数据转为字符串向服务器发送,服务器接收。比如取出18条每次发送一条循环发送,可是服务器有的时候接收是正常,有的时候一条数据接收多次,导致其他数据丢失,... 客户端从数据库里取出数据 转为字符串 向服务器发送,服务器接收。
比如取出18条 每次发送一条 循环 发送,可是服务器有的时候接收是正常,有的时候一条数据接收多次,导致其他数据丢失,但是接收的条数是相同的!(也就是接收的条数和发送的条数是相等的,就是有的时候同一条数据接收多次,其他数据就丢了!)
服务器接收代码:
internal void Listen()
{
Console.WriteLine("启动监听....");
//IPAddress addr = Dns.GetHostAddresses(Dns.GetHostName())[0];
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 2008);

serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

serverSocket.Bind(ipEndPoint);
serverSocket.Listen(15);
serverSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);
Console.WriteLine("开始监听:");

}

private void AcceptCallBack(IAsyncResult ar)
{
Socket oldSocket = (Socket)ar.AsyncState;

clientSocket = oldSocket.EndAccept(ar);

clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), clientSocket);

serverSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);

}

private void ReceiveMessage(IAsyncResult ar)
{
Socket client = (Socket)ar.AsyncState;

IPEndPoint ClientIp = client.RemoteEndPoint as IPEndPoint;
Console.WriteLine("客户端IP:" + ClientIp.Address + "__端口:" + ClientIp.Port);

int receiveDataLength = client.EndReceive(ar);

string str = System.Text.Encoding.UTF8.GetString(data);
}
展开
 我来答
匿名用户

2011-11-09
展开全部
学习,这产UDP的吧?
还是异步的。
追问
这是TCP,异步的!
追答
private void AcceptCallBack(IAsyncResult ar)
{
Socket oldSocket = (Socket)ar.AsyncState;

clientSocket = oldSocket.EndAccept(ar);

clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), clientSocket);

serverSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);

}
这里为什么还要再执行一次:
serverSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式