• Java多线程Socket在控制台输出的多人聊天室编程


    服务器端代码

     1 import java.io.IOException;
     2 import java.net.ServerSocket;
     3 import java.net.Socket;
     4 import java.util.ArrayList;
     5 
     6 public class Server {
     7 
     8     private static ArrayList<Socket> list = new ArrayList<Socket>();
     9     public static void main(String[] args) throws IOException {
    10         ServerSocket server = new ServerSocket(9999);
    11         while(true){
    12             Socket socket = server.accept();
    13             list.add(socket);
    14             new ServerThread(socket,list).start();;
    15         }
    16         
    17     }
    18     
    19     
    20     
    21 }

    客户端代码

     1 import java.io.IOException;
     2 import java.net.Socket;
     3 import java.net.UnknownHostException;
     4 
     5 public class Client {
     6 
     7     public static void main(String[] args) throws UnknownHostException, IOException {
     8         Socket socket = new Socket("127.0.0.1",9999);
     9         new ThreadWriter(socket).start();
    10         new ThreadReader(socket).start();
    11     }
    12     
    13 }

    服务器处理socket的多线程

     1 import java.io.IOException;
     2 import java.io.InputStream;
     3 import java.io.OutputStream;
     4 import java.net.Socket;
     5 import java.util.ArrayList;
     6 
     7 public class ServerThread extends Thread {
     8 
     9     Socket socket;
    10     ArrayList<Socket> list;
    11     InputStream is;
    12     OutputStream os;
    13     public ServerThread(Socket socket, ArrayList<Socket> list) {
    14         this.socket = socket;
    15         this.list = list;
    16     }
    17 
    18     @Override
    19     public void run() {
    20         try {
    21             while(true){
    22                 is = socket.getInputStream();
    23                 byte[] b = new byte[1024];
    24                 int len = is.read(b);
    25                 String str = new String(b,0,len);
    26                 System.out.println(str);
    27                 for(Socket socket:list){
    28                     os = socket.getOutputStream();
    29                     os.write(str.getBytes());
    30                 }
    31             }
    32             
    33         } catch (IOException e) {
    34             e.printStackTrace();
    35         }
    36     }
    37 
    38 }

    读取客户端输入流多线程代码

     1 import java.io.IOException;
     2 import java.io.InputStream;
     3 import java.net.Socket;
     4 
     5 public class ThreadReader extends Thread {
     6 
     7     Socket socket;
     8     public ThreadReader(Socket socket) {
     9         this.socket = socket;
    10     }
    11 
    12     @Override
    13     public void run() {
    14         try {
    15             while(true){
    16                 
    17                 InputStream is = socket.getInputStream();
    18                 byte[] b = new byte[1024];
    19                 int len = is.read(b);
    20                 String str = new String(b,0,len);
    21                 System.out.println(str);
    22             }
    23         } catch (IOException e) {
    24             // TODO Auto-generated catch block
    25             e.printStackTrace();
    26         }
    27     }
    28 
    29 }

    客户端发送数据多线程代码

     1 import java.io.IOException;
     2 import java.io.OutputStream;
     3 import java.net.Socket;
     4 import java.util.Scanner;
     5 
     6 public class ThreadWriter extends Thread {
     7 
     8     Socket socket;
     9     public ThreadWriter(Socket socket) {
    10         this.socket = socket;
    11     }
    12 
    13     @Override
    14     public void run() {
    15         try {
    16             Scanner sc = new Scanner(System.in);
    17             while(true){
    18                 String str = sc.next();
    19                 OutputStream os = socket.getOutputStream();
    20                 os.write(str.getBytes());
    21             }
    22         } catch (IOException e) {
    23             // TODO Auto-generated catch block
    24             e.printStackTrace();
    25         }
    26     }
    27 
    28 }
  • 相关阅读:
    webform单选、复选
    webform下拉列表、列表框
    webform文本框 、显示文字、按钮、跳转页面、页面传值
    sol函数初级查询,去重、分组、排序
    sql基础
    递归
    函数有多个返回值
    Hibernate (开放源代码的对象关系映射框架)介绍
    extjs介绍
    easyui介绍
  • 原文地址:https://www.cnblogs.com/jpwz/p/5715852.html
Copyright © 2020-2023  润新知