网上参考别人的例子改自己的程序终于搞明白了原来在socket的服务器端设置线程并不是像之前想的那样建立一个连接后就重新开一个端口去监听这样的想法遇到了很多问题首先当我把客户端弄成for循环递增的链接个格端口的时候发现总是异常因为服务器端的新的端口建立速度总是没有客户端的主动连接块然后试图去让客户端创建新端口链接的速度降慢但是一直没调试成功并且即便是成功了这个问题还是有隐患的因为客户端的链接速度是不可控的有两天这个问题没有进展后来在网上查到了原来服务器端的线程并不是用来创建新的端口的之前也想过一个服务器端不可能就连接一个客户端但是没想出来解决办法看了例子的提示后才做出来服务器端的线程是用来监听连接客户端的即当监听到客户端的连接请求时就会主动去创建一个socket线程去连接完成客户端和服务器端的交互后客户端自动断开链接
核心代码
Main 函数
ServerSocket serverSocket=null
boolean listening=true
try{
serverSocket=new ServerSocket()
//创建一个ServerSocket在端口监听客户请求
}catch(IOException e) {}
while(listening){ //永远循环监听
newServerThread(serverSocketaccept()clientnum)start()
//监听到客户请求根据得到的Socket对象和
客户计数创建服务线程并启动之
clientnum++ //增加客户计数
}
serverSocketclose() //关闭ServerSocket
设计ServerThread类
public class ServerThread extends Thread{
Socket socket=null //保存与本线程相关的Socket对象
int clientnum //保存本进程的客户计数
public ServerThread(Socket socketint num) { //构造函数
thissocket=socket //初始化socket变量
clientnum=num+ //初始化clientnum变量
}
public void run() { //线程主体
try{//在这里实现数据的接受和发送
}