上一篇文章说到怎样写一个最简单的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的请求了。
                标题名称:JavaSocket实战之二:多线程通信
                
                本文地址:http://www.csdahua.cn/qtweb/news8/159158.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网