关于c# socket服务器开发问题,求高手指导!
最近用C#做一个socket项目,现在服务器可以采用两种方式,
第一种是多线程加同步监听的方式.就是每个socket创建一个thread用socket.receive()监听接收数据.
第二种是异步监听方式,就是用socket.beginreceive()和socket.endreceive()监听接收数据.
我做测试的时候是这样的.
写一个客户端.客户端中for循环向服务器端建立socket连接,建立好后就发送循环数i.
并保持socket连接不断开.
for(i=0;i<max;i++){
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(txtIP.Text), Convert.ToInt32(txtPort.Text));
s.Connect(endPoint);
s.Send(encoding.GetBytes(i.ToString()));
}
服务器端就只是监听接收客户端发送的数据并记录.
用第一种监听方式,服务器大概可以建立1700个socket正常接收数据.超过1700个以后.服务器端只能接收到1500多个数据.
并且这1500多个数据不连续,比如可能发送2000个,1600没有收到,但是1700却收到了,客户端这边的socket.send()也没有报异常.然后再用服务器未接收到数据的socket连接重新单独发送一条数据,服务器可以正常接收到.
用第二种监听方式,服务器可以建立超过4000个socket正常接收数据.(超过4000个后客户端的程序运行着就死了...手头也没有多台机器进行测试,就一台做服务器一台做模拟客户端).
请问:
1.为何第一种监听方式会出现那种情况?
2.第二种监听方式是不是也会有socket连接上限,如果有是多少?
3.单台PC机做socket服务器最大并发socket连接数是多少?
4.出现这种上限的情况是与编码不正确有关还是服务器机器的硬件配置有关?
5.两种监听方式哪种更优异点?有没有比以上两种更加优异的监听方式?