当前位置: 移动技术网 > IT编程>开发语言>Java > Java Socket实现多线程通信功能示例

Java Socket实现多线程通信功能示例

2019年07月22日  | 移动技术网IT编程  | 我要评论

本文实例讲述了java socket实现多线程通信功能的方法。分享给大家供大家参考,具体如下:

前面的文章《java socket实现单线程通信的方法示例》说到怎样写一个最简单的java socket通信,但是文章中的例子有一个问题就是server只能接受一个client请求,当第一个client连接后就占据了这个位置,后续client不能再继续连接,所以需要做些改动,当server没接受到一个client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个client连接请求,这样就不会阻塞server端接收请求了。每个独立运行的程序在使用完socket对象之后要将其关闭。代码如下:

package com.googlecode.garbagecan.test.socket.sample2;
import java.io.bufferedreader;
import java.io.ioexception;
import java.io.inputstreamreader;
import java.io.printwriter;
import java.net.serversocket;
import java.net.socket;
public class myserver {
  public static void main(string[] args) throws ioexception {
    serversocket server = new serversocket(10000);
    while (true) {
      socket socket = server.accept();
      invoke(socket);
    }
  }
  private static void invoke(final socket client) throws ioexception {
    new thread(new runnable() {
      public void run() {
        bufferedreader in = null;
        printwriter out = null;
        try {
          in = new bufferedreader(new inputstreamreader(client.getinputstream()));
          out = new printwriter(client.getoutputstream());
          while (true) {
            string msg = in.readline();
            system.out.println(msg);
            out.println("server received " + msg);
            out.flush();
            if (msg.equals("bye")) {
              break;
            }
          }
        } catch(ioexception ex) {
          ex.printstacktrace();
        } finally {
          try {
            in.close();
          } catch (exception e) {}
          try {
            out.close();
          } catch (exception e) {}
          try {
            client.close();
          } catch (exception e) {}
        }
      }
    }).start();
  }
}

下面是client程序代码:

package com.googlecode.garbagecan.test.socket.sample2;
import java.io.bufferedreader;
import java.io.inputstreamreader;
import java.io.printwriter;
import java.net.socket;
public class myclient {
  public static void main(string[] args) throws exception {
    socket socket = new socket("localhost", 10000);
    bufferedreader in = new bufferedreader(new inputstreamreader(socket.getinputstream()));
    printwriter out = new printwriter(socket.getoutputstream());
    bufferedreader reader = new bufferedreader(new inputstreamreader(system.in));
    while (true) {
      string msg = reader.readline();
      out.println(msg);
      out.flush();
      if (msg.equals("bye")) {
        break;
      }
      system.out.println(in.readline());
    }
    socket.close();
  }
}

测试,首先运行myserver类,然后运行两个myclient类,然后分别在每个myclient的提示符下输入字符串,就可以看到server可以分别接收处理每个client的请求了。

更多关于java相关内容感兴趣的读者可查看本站专题:《java socket编程技巧总结》、《java文件与目录操作技巧汇总》、《java数据结构与算法教程》、《java操作dom节点技巧总结》和《java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网