18 intbufLen=0;
19 try
20 {
21 bufLen=s.Available;
22
23 s.Receive(buffer,0,bufLen,SocketFlags.None);
24 if(bufLen==0)
25 continue;
26 }
27 catch(Exceptionex)
28 {
29 MessageBox.Show("ReceiveError:"+ex.Message);
30 return;
31 }
32 clientep=(IPEndPoint)s.RemoteEndPoint;
33 stringclientcommand=System.Text.Encoding.ASCII.GetString(buffer).Substri
ng(0,bufLen);
34
35 lstServer.Items.Add(clientcommand+"("+clientep.Address+":"+clientep.Port+
")");
36
37 }
38
39 }
通过 IPEndPoint clientep = (IPEndPoint)s.RemoteEndPoint;我们可以获取连接上的远
程主机的端口和 IP 地址,如果想查询该主机的其它属性如主机名等,可用于上一篇讲的
Dns.GetHostByAddress(string ipAddress)来返回一个 IPHostEntry 对象。另外我们要注意
的是,通过 Socket 发送信息,必须要先把发送的信息转化成二进字进行传输,收到信息后
也要把收到的二进字信息转化成字符形式,这里可以通过
Encoding.ASCII.GetBytes(welcome);和 Encoding.ASCII.GetString(buffer).Substring(0,
bufLen);来实现。
以上就是服务端 Socket 侦听模式的实现,只要有远程客户端 Socket 连接上后,就可
以轻松的发送信息和接收信息了。下面我们来看看客户端 Socket 是怎么连接上服务器的。
二、客户端连接
客户端 Socket 连接相对来说比较简单了,另外说明一下,在执行客户端连接前,服务
端 Socket 侦听必须先启动,不然会提示服务器拒绝连接的信息。
1、创建 IPEndPoint 实例和套接字
1 //创建一个套接字
2 IPEndPointipep=newIPEndPoint(IPAddress.Parse("127.0.0.1"),6001);