java 简单socket通信

TCPServer

ServerSocket ss = new ServerSocket(port);//创建以server运行的机器的locahost:port的服务器
/**
通过ss.accept(),阻塞式接收连接到服务器的socket,并创建一个线程来监听这个socket
*/
while(true){
    Socket s = ss.accept();
    new Thread(new ServerTask(s)).start();
}

ServerTask:调用Runable接口,

public Class ServerTask implements Runable{
     private Socket s;

    public ServerTask(Socket s){//将监听的socket赋给s
        this.s = s;
    }

    @Override
    public void run() {//监听socket的输入输出流
        InputStream is = s.getInputStream();//socket->server
        OutputStream os = s.getOutputStream();//server ->socket
        Scanner sc = null;
        PrinterWriter pw = null;
        try {
            sc = new Scanner(is);
            pw = new PrinterWriter(os);
        } catch (IOException e) {
            e.printStackTrace();
        }
        while(true) {
            String data = sc.nextLine();//阻塞式监听,是否接收到socket发来数据
            System.out.println(data);
            pw.println("xxxxxx");//接收到data后,再返回信息xxxxx给socket
            pw.flush();
        }
    }
}

client

public class Client {
    public static void main(String[] args) throws IOException{
        Socket s = new Socket("127.0.0.1",8888);//创建socket,连接服务器,127.0.0.1:8888
        new Thread(new WriteTask(s)).start();//创建线程对socket的写数据流监听   socket-》server
        new Thread(new ReadTask(s)).start();//创建线程对socket的读数据流监听  server - 》socket
}

WriteTask

public class WriteTask implements Runnable {
    private Socket s;
    public WriteTask(Socket s){
        this.s = s;
    }
    @Override
    public void run() {
        PrintWriter printWriter = null;
        try {
            printWriter = new PrintWriter(s.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        Scanner sc = new Scanner(System.in);

        while(true){//阻塞式判断终端是否有输入
            String message = sc.nextLine();
            printWriter.println(message);//socket->server
            printWriter.flush();
        }
}

ReadTask

        InputStream is = s.getInputStream();
        Scanner sc = new Scanner(is);

        while(true){//阻塞式判断是否有输入
            String message = sc.nextLine();//Server->socket
            System.out.println(message);

        }

总结:
1.服务器while true,阻塞接收socket,接到后,对socket专门创建线程进行监听,然后对socket接收请求,根据请求,服务器返回response
2.client 创建socket 1.client写数据,对server发送request,2.创建线程,对服务器的reponse进行接收
3.PrinterWriter是对outputStream的封装,
Scanner是对inputStream封装,只是很方便文字传输,但是要是传输图片或者object时 …….就会报错,所以,选择合适的流是很重要的
4.我上述的代码是简要版

猜你喜欢

转载自blog.csdn.net/qq_32296307/article/details/80009494