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