socket 线程 思路 java

 我来答
科创17
2022-10-25 · TA获得超过5901个赞
知道小有建树答主
回答量:2846
采纳率:100%
帮助的人:175万
展开全部

  网上参考别人的例子 改自己的程序 终于搞明白了 原来在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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式