socket 线程 思路 java

在网上参考别人的例子,改自己的程序,终于搞明白了。原来在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、付费专栏及课程。

余额充值