日期:2014-05-18  浏览次数:20841 次

关于高效率Socket连接的问题
C# code

Socket _Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_Socket.Connect(_IpEnd);
_Socket.Send(url);
var response = Encoding.Default.GetString(data, 0, _Socket.Receive(data));


Socket连接有这么几个步骤,问题是我的程序已经是多线程是用Parallel或者ThreadPool的方式都试过。本机资源和网络带宽都只是用了一点点。所以我认为瓶颈可能在于等待网络连接的耗时。
那么我想尽量减少连接。所以有了底下的代码
初始化:
C# code

Socket _Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_Socket.Connect(_IpEnd);


//循环代码
C# code

_Socket.Send(url);
var response = Encoding.Default.GetString(data, 0, _Socket.Receive(data));


但是并不是我说认为的在初始化中一次连接,然后在循环中Send信息或Receive信息这么简单。
会报这个个错.{由于以前的函数求值超时,函数求值被禁用。必须继续执行才能重新启用函数求值。}
请问这个是对方服务器的限制还是我本机的的限制,如何可以达到我的目的?

------解决方案--------------------
我的建议是这样的 ,用异步多线程 ,这样相当于对线程池的封装 。理论并发量7500条。这个是我目前知道的效率和抗压力最好的 。你可以考虑一下