java小项目——单线程的聊天室

    xiaoxiao2022-07-12  152

    Socket编程 它使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个Socket,并尝试连接服务器的Socket。 当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。 以下步骤在两台计算机之间使用套接字建立TCP连接时会出现: 1.服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。 2.服务器调用 ServerSocket 类的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。 3.服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。 4.Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。 5.在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。

    连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。 TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送.以下是一些类提供的一套完整的有用的方法来实现 socket。

    客户端:

    package com.bittech.chatroom.client.single; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; import java.net.Socket; import java.util.Scanner; public class SingleClient { public static void main(String[] args) { //1. 客户端和服务器建立连接 String host = "127.0.0.1"; int port = 8080; try { Socket socket = new Socket(host, port); System.out.println(); //2.数据传输 //2.1 读数据 InputStream in = socket.getInputStream(); Scanner scanner = new Scanner(in); String message = scanner.nextLine(); System.out.println("来自服务器的数据:"+message); try { Thread.sleep(10000); } catch (IOException e) { } //2.2 写数据 OutputStream out = socket.getOutputStream(); PrintStream printStream = new PrintStream(out); printStream.println("你好"); printStream.flush(); socket.close(); } catch (IOException e) { } } }

    服务端:

    package com.bittech.chatroom.server.single; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class SingleServer { public static void main(String[] args) { //1. 实例化ServerSocket对象 try { ServerSocket serverSocket = new ServerSocket(8080); System.out.println("服务器启动:" + serverSocket.getInetAddress() + ":" + serverSocket.getLocalPort()); while (true) { //2. 等待接收客户端连接 //accept : 阻塞方法,直到客户端连接到服务器,返回 final Socket socket = serverSocket.accept(); System.out.println("来自客户端:" + socket.getRemoteSocketAddress() + ":" + socket.getPort()); //3. 数据传输 //3.1 写数据 OutputStream out = socket.getOutputStream(); PrintStream printStream = new PrintStream(out); printStream.println("欢迎你"); printStream.flush(); //3.2 读数据 InputStream in = socket.getInputStream(); Scanner scanner = new Scanner(in); String message = scanner.nextLine(); System.out.println("来自客户端的数据:" + message); // serverSocket.close(); } } catch (IOException e) { } } }
    最新回复(0)