
求指导!!!!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);
} 展开
比如取出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);
} 展开
1个回答
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);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询