1. 程式人生 > >java socket伺服器客戶端多執行緒小例子

java socket伺服器客戶端多執行緒小例子

package com.xueyoucto.xueyou;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

/**
 * Hello world!
 * Server
 */
class ServerThread implements Runnable{
    Socket s = null;
    BufferedReader br = null;

    public ServerThread(Socket s) throws IOException{
        this.s = s;
        br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    }

    @Override
    public void run() {
        try {
            String content = null;
            while ((content = readFromClient()) != null){
                System.out.println("客戶端發來內容:" + content);
                for (Socket socket : App.sockets) {
                    PrintStream ps = new PrintStream(s.getOutputStream());
                    ps.println(content);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String readFromClient(){
        try {
            return br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
            App.sockets.remove(s);
        }
        return null;
    }
}

public class App {
    private static final int SERVER_PORT = 60000;
    public static ArrayList<Socket> sockets = new ArrayList<Socket>();
    public static void main(String[] args) throws IOException{
        ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
        while(true){
            Socket s = serverSocket.accept();
            System.out.println("someone in ...");
            sockets.add(s);
            new Thread(new ServerThread(s)).start();
        }
    }
}
Client
package com.xueyoucto.xueyou;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

/**
 * Hello world!
 * client
 */

class ClientThread implements Runnable{
    private Socket s;
    BufferedReader br = null;

    public ClientThread(Socket s) throws IOException{
        this.s = s;
        br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    }

    @Override
    public void run() {
        String content = null;
        try {
            while((content = br.readLine()) != null){
                System.out.println(content);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public class App {
    private static final int SERVER_PORT=60000;
    public static void main(String[] args) throws IOException{
        System.out.println("Hello World!");
        Socket s = new Socket("192.168.1.120",SERVER_PORT);
        new Thread(new ClientThread(s)).start();
        PrintStream ps = new PrintStream(s.getOutputStream());
        String line = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        while((line = br.readLine())!=null){
            ps.println(line);
        }
    }
}

執行結果: