windows socket怎样实现一个客户端连接多个服务器端
TCP:有几个服务端,就建立几个连接
多个连接的通信可以采用多线程或者select函数来处理
UDP:不需要建立连接,直接用sendto发送和readfrom接收
服务器端在指定端口侦听,这个实例对连接请求使用新的套接字响应。而客户端则无需特别的代码。
具体做法可参考下面的内容:
在服务端放一个winsock控件name属性设置为sock,设置它的index属性为0
在表单的Initialize事件中开始侦听:
sock(0)LocalPort = 2012
sock(0)Listen
在sock的ConnectionRequest事件编写代码:
Dim iSock As Integer
'寻找是否有空闲的套接字
For iSock = 1 To sockUBound
'找到第一个后即可结束循环
If sock(iSock)State = 0 Then Exit For
Next
'如果没有空闲的套接字,建立一个新的(新建的就是空闲的)
If iSock > sockUBound Then Load sock(iSock)
'响应连接请求
sock(iSock)Accept requestID
其它事件的代码按实际需要编写,与客户端没有什么区别。
上面这部分代码,就是让sock(0)在指定的端口进行侦听,然后,如果有客户端在这个端口请求连接,那么,sock(0)就会产生一个ConnectionRequest事件,这时,并不去用sock(0)去响应连接,而是建立一个新的sock,如sock(1),sock(2)并用它们的Accept去与客户端的socket交互,而sock(0)继续在原有的端口上进行着侦听。
这样,就可以在同一个端口上接入多个客户端,这就是服务器侦听模式的简单应用例子了。
建立多个线程就ok了 为每一个连接 创建一个线程去处理
while (true)
{
// 得到包含客户端信息的套接字
Socket client = serverAccept();
//创建消息服务线程对象
ClientThread newclient = new ClientThread(client);
//把ClientThread 类的ClientService方法委托给线程
Thread newthread = new Thread(new ThreadStart(newclientClientService));
// 启动消息服务线程
newthreadStart();
}
0条评论