首先请允许我做一个截图:
以上,是我服务端设计
我们知道:服务器端口数最大可以有65535个,但是实际上常用的端口才几十个,由此可以看出未定义的端口相当多。因此,我们可以通过程序随机获取一个当前可用的端口
我将此方法写成了一个类,如下:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace ServerForm.CommonCS { public class PortHelper { /// <summary> /// 这个方法是验证某个端口是否可用 /// </summary> /// <param name="port"></param> /// <returns></returns> public static bool IsAvaliable(int port) { Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); bool result = false; try { sk.Bind(new IPEndPoint(IPAddress.Any, port));//尝试绑定,因为如果该端口已经被使用,则无法绑定,会导致异常 result = true; } catch { result = false; } finally { sk.Close(); } return result; } /// <summary> /// 这个方法取得一个可用的端口 /// </summary> /// <returns></returns> public static int GetAvaliablePort() { Random rnd = new Random(); int port = rnd.Next(1024, 65535);//随机产生一个动态的端口号 while (!IsAvaliable(port)) { port = rnd.Next(1024, 65535); } return port; } } }
当然,这仅仅是获取可用端口的方法,对于套接字编程意义不大。
那么,根据上图可知,有个按钮叫做:开始监听,也就是说点击这个按钮,服务器将时时监听服务器的某个端口,代码如下:
今天心情不好,代码就不写了,直接上案例:
代码下载路径:点击此下载
也可以通过链接打开:http://files.cnblogs.com/files/chenwolong/Socket.zip
大致效果图如下:
@陈卧龙博客