31.JAVA编程之网络编程TCP协议

tcp是一个可靠的协议,面向连接的协议,实现tcp程序,需要编写服务器端和客户端
ServerSocket:此类实现服务器套接字
Socket:此类实现客户端套接字(也可以就叫套接字)
Socket是网络驱动层提供给应用程序编程的接口和一种机制

单服务器和单用户端通信

示例程序:
服务器端代码:

//服务器端:先读再写
public class EchoServerDemo {
    public static void main(String[] args) {
        //step1:创建一个服务器端的Socket(91024-65535)
        try {
            ServerSocket server = new ServerSocket(6666);
            System.out.println("服务器已启动,正在等待客户端连接");
            //step2:等待客户端连接,造成阻塞,如果没有客户端连进来就一直等待
            //如果有客户端连接成功,立即返回一个Socket对象
            Socket socket = server.accept();
            System.out.println("客户端连接成功"+server.getInetAddress().getHostAddress());
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));
            //step3:通过输入流读取网络数据,如果没有数据,会造成阻塞
            String info = br.readLine();
            System.out.println(info);
            //step4:获取输出流,向客户端返回消息
            PrintStream ps = new PrintStream(
                    new BufferedOutputStream(socket.getOutputStream()));
            ps.println("echo:"+info);
            ps.flush();
            //step5:关闭
            ps.close();
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

客户端代码:

public class EchoClientDemo {
    public static void main(String[] args) {
        //step1:创建一个Socket对象
        try {
            Socket socket = new Socket("localhost",6666);
            //step2:获取socket的输入输出流
            PrintStream ps = new PrintStream(
                    new BufferedOutputStream(socket.getOutputStream())
            );

            BufferedReader br = new BufferedReader(
                    new InputStreamReader(socket.getInputStream())
            );
            ps.println("hello");
            ps.flush();

            //读取服务器端返回的数据
            String info = br.readLine();
            System.out.println(info);
            ps.close();
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行效果:

先运行服务器端:

在运行客户端:

此时服务器端:

单服务器和多客户端通信

需要加入多线程的处理机制

你可能感兴趣的:(31.JAVA编程之网络编程TCP协议)