是么,测试一下,把源码发来看看,
微软的。NET平台也实在太大了,没办法的
微软的。NET平台也实在太大了,没办法的
解决方案 »
- vs怎么实现用GDI绘的字,在固定一个范围内呢?
- Reflector反编译EXE程序,提示“未引用到对象实例” ,这样的情况怎么反编译?
- c# treeview 选中某项后,焦点移开后,比如焦点到文本框里了,此时发现treeview刚才选中的某项的选中状态消失了。
- 求一个 C#写的C语言的解析器。
- 怎么让生成的程序没有“版本”信息
- 【零编程经验,想学C#】求建议!
- WebForm的TextBox没有KeyDown事件,这怎么办?
- 怎样比较两个字符串是否相等?
- 添加新项--创建数据集 连接的问题
- 哇哈哈哈哈哈!双喜临门!!散分散分!!!瓦哈哈哈哈
- 带有Config文件的.Net的Dll,反编译后Config文件在哪儿?
- 如何导出excel表格?
怎么发给你呢?
[email protected]
[email protected]
多谢?有空多交流!
public static void AcceptCallback(IAsyncResult ar)
{
try
{
Socket listener = (Socket)ar.AsyncState;
//new socket
handler = listener.EndAccept(ar);这里的handler应该是包含状态的,也说handler包含了客户端和服务器端连接的信息,它知道哪个客户端连接上来了,可以通过handler.RemoteEndPoint获取客户端的信息,
在Exception中判断SocketException.ErrorCode对固定的handler(判断是否为断开的那个handler)进行处理,而不要用缺省的Exception处理
如果当前使用的是无连接协议(如 UDP),则根本不需要侦听连接。调用 ReceiveFrom 方法可接受任何传入的数据报。使用 SendTo 方法可将数据报发送到远程主机。
--------------------------------------------------------------------------------
若要在执行过程中使用单独的线程处理通信,请使用下面的方法,这些方法适用于异步操作模式。 如果当前使用的是面向连接的协议(如 TCP),则可使用 Socket、BeginConnect 和 EndConnect 方法来连接侦听主机。通过使用 BeginSend 和 EndSend 方法,或者使用 BeginReceive 和 EndReceive 方法,可以进行异步数据通信。可以使用 BeginAccept 和 EndAccept 处理传入的连接请求。
如果当前使用的是无连接协议(如 UDP),则可以使用 BeginSendTo 和 EndSendTo 来发送数据报,而使用 BeginReceiveFrom 和 EndReceiveFrom 来接收数据报。
================================================================
以上是MSDN帮助中的内容,证明异步socket是多个线程的,发生异常时只需要处理其中异常的线程
---------------------------------------
检查一下是不是还有数据没有处理完
在你的程序里面调用 BeginSend 之后,如果客户端意外断开,程序走到int bytesRead = handler.EndReceive(ar); 也不会出错吗?请你给我段原码看看,好吗?