使用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 请哪个高手讲解下为什么会这样啊?
服务器端:
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 请哪个高手讲解下为什么会这样啊?
解决方案 »
- c# 实现复制粘贴功能,求解!
- c# winform程式共享后,在别的电脑打开错误
- 为多个dropdownlist赋值
- c# 做一个类似于谷歌浏览中审核元素功能
- gridview 分页时,加粗或者加下划线显示当前页
- 如何给grid中所列出的内容增加一列编号?
- 如何在GridData控件中添加其他控件?
- 关于简单的手机接口调用的问题(常规问题)??
- treeview拖动与合并节点
- 多个客户端同时调用服务器上webservice接口,实现插入数据到服务器数据库,会出现死锁的情况吗?
- 耗尽最后60分 一定要得一结果 关于Socket的问题
- 编译器错误信息: CS0122: 不可访问,因为它受保护级别限制 。这是为什么啊?在线等
我的环境是:windows 2003+VS2005!