Socket连接的奇怪问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
使用Tcp的Socket通信.
服务器端:
Socket server = ......... (tcp的)
IPEndPoint serverPoint = new IPEndPoint(Dns.GetHostAddresses(Dns.GetHostName())[0], 8888); //获得本地终结点
server.Bind(serverPoint); //绑定
server.Listen(100); //监听
Socket s1 = server.Accept();
int len = s1.Receive(buffer); //接收数据
客户端:
Socket client = ....... (tcp的)
client.Connect(IPAddress.Parse("192.168.1.5"),8888); //本机地址是192.168.1.5
本来如果客户端没有发送数据的话,服务器会一直停在s1.Receive上.
但是我如果在客户端同时用两个client去连接,服务器端接收这两个连接:
服务器端:(以下代码可以直接运行)
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint serverPoint = new IPEndPoint(Dns.GetHostAddresses(Dns.GetHostName())[0], 8888); //本地终结点
server.Bind(serverPoint); //绑定
server.Listen(100);
Socket s = server.Accept();
Console.WriteLine("s is Accept");
Socket s2 = server.Accept();
Console.WriteLine("s2 is Accept");
byte[] buffer = new byte[5];
int len = s.Receive(buffer);
Console.WriteLine("s第一次收到数据长度是:{0}", len);
len = s.Receive(buffer);
Console.WriteLine("s第二次收到数据长度是:{0}", len);
len = s2.Receive(buffer);
Console.WriteLine("s2第一次收到数据长度是:{0}",len);
len = s.Receive(buffer);
Console.WriteLine("s2第二次收到数据长度是:{0}", len);
客户端:(代码可直接运行)
Socket client = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Connect(IPAddress.Parse("192.168.1.5"),8888);
Socket client2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client2.Connect(IPAddress.Parse("192.168.1.5"), 8888);
这个时候 连接成功之后 再在服务器端调用 s和s2的Revice函数,就不会阻塞,而且可以调用无数次,并且每次接收到的数据长度都是0
请哪个高手讲解下为什么会这样啊?