java基于TCP的C/S通信,先需要启动服务器,再启动客户端,并登录服务器(需指定服务器IP地址以便与服务器建立连接)。登录成功后,客户端和服务器之间可以在自己的聊天UI界面上直接与对方进行聊天。
时间: 2024-05-08 18:15:47 浏览: 13
服务器端的代码如下:
```
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8888); // 监听端口号为8888
System.out.println("服务器已启动,等待客户端连接...");
} catch (IOException e) {
System.err.println("无法启动服务器,端口号可能已被占用!");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept(); // 等待客户端连接
System.out.println("客户端已连接,IP地址为:" + clientSocket.getInetAddress());
} catch (IOException e) {
System.err.println("无法接受客户端连接!");
System.exit(1);
}
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); // 读取客户端发送的数据
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); // 向客户端发送数据
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("客户端:" + inputLine); // 输出客户端发送的消息
out.println("服务器:" + inputLine); // 向客户端发送消息
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
```
客户端的代码如下:
```
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
String serverHostname = "localhost"; // 服务器IP地址
int serverPort = 8888; // 服务器端口号
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
socket = new Socket(serverHostname, serverPort); // 连接服务器
out = new PrintWriter(socket.getOutputStream(), true); // 向服务器发送数据
in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 读取服务器发送的数据
} catch (UnknownHostException e) {
System.err.println("无法连接到服务器,IP地址错误!");
System.exit(1);
} catch (IOException e) {
System.err.println("无法连接到服务器,端口号可能已被占用!");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); // 读取用户输入的数据
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput); // 向服务器发送消息
System.out.println("服务器:" + in.readLine()); // 输出服务器发送的消息
}
out.close();
in.close();
stdIn.close();
socket.close();
}
}
```
其中,服务器端的代码中使用了ServerSocket类来监听指定端口的连接请求,并通过Socket类来接受连接请求,获取连接后就可以进行数据的读写操作了。客户端的代码中使用了Socket类来连接服务器,并通过输入输出流来进行数据的读写操作。两端都使用了BufferedReader和PrintWriter来读写数据,以便进行更高效的操作。同时,客户端和服务器之间使用了TCP协议来保证数据的可靠传输。