Java基础-网络编程Server-Client通信(1)

package com.hspedu.TestServerClient;

import org.junit.Test;

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

public class Server {

    @Test
    public void startServer() throws IOException {
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("服务器Server正在监听8080端口,等待客户端Client连接...");
        Socket socket = serverSocket.accept();
        System.out.println("服务器socket的运行类型:" + socket.getClass());

        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int readData = 0;
        while ((readData = inputStream.read(bytes)) != -1) {
            System.out.print(new String(bytes, 0, readData));
        }

//        int readChar = 0;
//        while ((readChar = inputStream.read()) != -1) {
//            System.out.print((char) readChar);
//        }

        inputStream.close();
        socket.close();
        serverSocket.close();
    }
}

1、ServerSocket可以通过多个accept建立多个socket连接,可以和多个客户端连接,高并发;

2、ServerSocket的accept方法监听创建对应的端口(8080),阻塞状态等待client客户端连接,直至有client客户端连接继续执行;

3、建议使用字节bytes数组读取接收客户端client发送的信息,容量最好大于信息长度,否则容易会出现错位导致乱码问题(包括char单字节读取);

package com.hspedu.TestServerClient;

import org.junit.Test;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class Client {

    @Test
    public void startClient() throws IOException {
        Socket socket = new Socket(InetAddress.getLocalHost(), 8080);
        System.out.println("客户端socket = " + socket);

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("客户端 >>> 服务器:hello, server".getBytes());

        outputStream.close();
        socket.close();
        System.out.println("客户端退出。");
    }
}

1、new Socket(InetAddress.getLocalHost(), 8080)连接本机服务器的8080端口,返回socket套接字对象;

2、socket套接字对象的getOutputStream获取客户端client的输出流对象。

posted @ 2022-04-21 11:02  柯南同学  阅读(99)  评论(0编辑  收藏  举报