欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-17 15:19:16
本文实例讲述了java socket实现多线程通信功能的方法。分享给大家供大家参考,具体如下: 前面的文章《java socket实现单线程通信的方法示例》说到怎样写一个...

本文实例讲述了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程序设计有所帮助。

上一篇:

下一篇: