异步socket出现问题了!!

a451618645 2009-05-29 04:03:36
代码过程如下:

public struct udpSource
{
public EndPoint ep;
public Socket workingSock;
public byte[] data;
}
public void socketInit()
{
Socket privateUdpSock = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
IPEndPoint IPE2 = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 60000);
udpSource us2 = new udpSource();
privateUdpSock.Bind(IPE2);
us2.ep = (EndPoint)IPE2;
us2.workingSock = privateUdpSock;
us2.data = new byte[5000];
privateUdpSock.BeginReceiveFrom(us2.data, 0, 4, SocketFlags.None, ref us2.ep, new AsyncCallback(privateCallBack), us2);
}
public void privateCallBack(IAsyncResult ar)
{
udpSource us2 = (udpSource)ar.AsyncState;
Socket sock = us2.workingSock;
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint tempRemoteEP = (EndPoint)sender;
int i = sock.EndReceiveFrom(ar, ref tempRemoteEP);//接收客户端第一个sendto
int m = sock.ReceiveFrom(us2.data, ref tempRemoteEP);//接收客户端第二个sendto
int j = sock.ReceiveFrom(us2.data, ref tempRemoteEP);//接收客户端第三个sendto
int k = sock.ReceiveFrom(us2.data, ref tempRemoteEP);//接收客户端第四个sendto,

sock.BeginReceiveFrom(us2.data, 0, 4, SocketFlags.None, ref tempRemoteEP, new AsyncCallback(privateCallBack), us2);
}

是这样的,服务器端在Form_Load里面运行socketInit();之后客户端连续调用4次sendto,服务器端第一次能成功收到数据。但是客户端第二次调用4个sendto的时候,服务器端在int i = sock.EndReceiveFrom(ar, ref tempRemoteEP)停止,说远程主机强迫关闭了一个现有连接。按我的理解,就算客户端关闭了socket,服务器端也应该在sock.EndReceiveFrom(ar, ref tempRemoteEP)处阻塞,不应该出错啊。这是为什么呢
...全文
28 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
a451618645 2009-05-29
  • 打赏
  • 举报
回复
呦,呦呦,看你这么热情那就给你了。
feiyun0112 2009-05-29
  • 打赏
  • 举报
回复
恭喜!接分

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

http://feiyun0112.cnblogs.com/
a451618645 2009-05-29
  • 打赏
  • 举报
回复
误会,问题已经解决!!

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧