多线程笔记--socket

Client端


import java.io.*;
import java.net.Socket;

public class ClientDemo1 {

    public static void main(String[] args) {
        try {
        	//向指定的IP的端口号发送远程连接
            Socket socket = new Socket("localhost" ,8080) ;
			
			//缓冲输出流
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())) ;

            writer.write("客户端Client01\n");
            writer.flush();
			
			//缓冲输入流
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())) ;
            String str = reader.readLine() ;
            System.out.println("收到服务端的消息:" + str);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


import java.io.*;
import java.net.Socket;

public class ClientDemo2 {

    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost" ,8080) ;

            Thread.sleep(1000);

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())) ;

            writer.write("客户端Client02\n");
            writer.flush();

            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())) ;
            String str = reader.readLine() ;
            System.out.println("收到服务端的消息:" + str);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

服务端

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {

    public static void main(String[] args) {
    	//注册一个端口的监听
        ServerSocket serverSocket = null ;

        try {
        	//8080端口监听,建立一个通道
            serverSocket = new ServerSocket(8080) ;
			
            while(true){
            	//并行处理多个连接
            	//accept()默认阻塞,知道客户端发过来连接
                Socket socket = serverSocket.accept() ;
                //异步处理socket
                new Thread(new ThreadServerDemo(socket)).start();
                //异步处理连接,不影响当前线程执行
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //TODO 关闭流
        }
    }
}


import java.io.*;
import java.net.Socket;

public class ThreadServerDemo implements Runnable {

    private Socket socket ;

    public ThreadServerDemo(Socket socket) {
        this.socket = socket;
    }

    /**
     * 异步进行处理
     */
    @Override
    public void run() {
        System.out.println("启动服务,收到一个客户点的连接,端口号为:"+socket.getPort());

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())) ;

            String clientStr = null ;

            clientStr = reader.readLine() ;

            System.out.println("收到客户端的数据" + clientStr);

            Thread.sleep(1000);

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())) ;

            writer.write("服务端收到数据,内容为:"+clientStr+"\n");

            //清空缓冲区
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

发布了56 篇原创文章 · 获赞 3 · 访问量 1174

猜你喜欢

转载自blog.csdn.net/qq_40788718/article/details/103648634