问题描述
c#的socket编程服务器端一般遵循1.创建socket实例2.bind3.listen4.accept等待客户端链接5.receive/send。。。。等等步骤问题如下:1.请问accept等待链接我看到很多实例是在Form_Load中调用了一次,我在想,只调用了一次如果客户端关掉重新启动,服务器端会不会建立新的客户端链接2.在msdn帮助中说accept函数在链接时会返回一个socket类型的实例,那么在没有客户端和他链接呢,是什么情况?返回一个空的socket实例吗?3.一般如果要进行多客户端和服务器交互,服务器端代码和客户端代码有谁能提供一个自己测试可靠的代码分享下吗,最好将accept那部分详细注释下,谢谢。
解决方案
解决方案二:
引用楼主zcguoji的回复:
问题如下:1.请问accept等待链接我看到很多实例是在Form_Load中调用了一次,我在想,只调用了一次如果客户端关掉重新启动,服务器端会不会建立新的客户端链接
确实有很多实例是这样的,而且msdn上的“范例”就是这样的,造成了许多博客胡乱抄的示例代码也是如此。其实是,这种例子本来就是哄小孩子的。它“就是”仅仅响应第一次客户端连接,就是如此!而你不相信那些人会写出那种垃圾例子来吧?!msdn上的关于通讯部分的例子,基本上都是很烂的,而一般人不相信微软会写这么烂的例子。
解决方案三:
引用楼主zcguoji的回复:
2.在msdn帮助中说accept函数在链接时会返回一个socket类型的实例,那么在没有客户端和他链接呢,是什么情况?返回一个空的socket实例吗?
没有客户端连接时,accept语句会阻塞当前线程,“卡”在这里一直等待。msdn上的“异步Accept”的也极其有害。它使用一个“ManualResetEvent.WaitOne、ManualResetEvent.Set、while死循环”模式来用同步阻塞的语法来写展示BeginAccept语法,实在是坑爹的。真正的异步并发代码,根本不需要ManualResetEvent、WaitOne、while循环。
解决方案四:
引用楼主zcguoji的回复:
3.一般如果要进行多客户端和服务器交互,服务器端代码和客户端代码有谁能提供一个自己测试可靠的代码分享下吗,最好将accept那部分详细注释下,谢谢。
我贴过一个使用TcpListener/TcpClient机制的IOCP机制代码。
解决方案五:
引用3楼sp1234的回复:
Quote: 引用楼主zcguoji的回复:
3.一般如果要进行多客户端和服务器交互,服务器端代码和客户端代码有谁能提供一个自己测试可靠的代码分享下吗,最好将accept那部分详细注释下,谢谢。我贴过一个使用TcpListener/TcpClient机制的IOCP机制代码。
首先谢谢你的回答,看了受益匪浅,再次表示感谢,我这又遇到了一些通信问题,烦请帮我看看,谢谢http://bbs.csdn.net/topics/391892934
解决方案六:
引用3楼sp1234的回复:
Quote: 引用楼主zcguoji的回复:
3.一般如果要进行多客户端和服务器交互,服务器端代码和客户端代码有谁能提供一个自己测试可靠的代码分享下吗,最好将accept那部分详细注释下,谢谢。我贴过一个使用TcpListener/TcpClient机制的IOCP机制代码。
有socket类直接操作的代码吗?类似我说的bind,listen等步骤的