socket 线程 思路 java

3 篇文章 0 订阅
网上参考别人的例子,改自己的程序,终于搞明白了。原来在socket的服务器端设置线程并不是像之前想的那样,建立一个连接后就重新开一个端口去监听,这样的想法遇到了很多问题,首先,当我把客户端,弄成for循环递增的链接个格端口的时候,发现总是异常,因为服务器端的新的端口建立速度总是没有客户端的主动连接块,然后试图去让客户端创建新端口链接的速度降慢,但是一直没调试成功,并且即便是成功了。这个问题还是有隐患的,因为客户端的链接速度是不可控的,有两天,这个问题没有进展,后来在网上查到了,原来服务器端的线程,并不是用来创建新的端口的,之前也想过,一个服务器端不可能就连接一个客户端,但是没想出来解决办法,看了例子的提示后,才做出来,服务器端的线程是用来监听连接客户端的,即,当监听到客户端的连接请求时就会主动去创建一个socket线程去连接,完成客户端和服务器端的交互。后客户端自动断开链接。

  核心代码:

  Main 函数

  

    ServerSocket serverSocket=null;

  boolean listening=true;

  try{

  serverSocket=new ServerSocket(4700);

  //创建一个ServerSocket在端口4700监听客户请求

  }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+1; //初始化clientnum变量

  }

  public void run() { //线程主体

  try{//在这里实现数据的接受和发送

  }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值