用Java编写基于TCP协议的聊天程序
时间: 2024-02-05 14:14:02 浏览: 74
基于TCP的协议的聊天程序
3星 · 编辑精心推荐
好的,让我们来编写一个基于TCP协议的聊天程序。在这个程序中,我们将使用Java Socket来实现客户端和服务器之间的通信。
首先,我们需要创建一个服务器端,它将监听来自客户端的连接请求。以下是一个简单的服务器端代码示例:
```java
import java.io.*;
import java.net.*;
public class ChatServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444.");
System.exit(1);
}
Socket clientSocket = null;
try {
System.out.println("Waiting for connection...");
clientSocket = serverSocket.accept();
System.out.println("Connection established.");
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine, outputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("Client: " + inputLine);
outputLine = inputLine.toUpperCase();
out.println(outputLine);
if (outputLine.equals("BYE"))
break;
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
```
在上面的代码中,我们首先创建了一个ServerSocket对象,该对象监听来自客户端的连接请求。当客户端连接成功后,我们使用Socket对象来获取输入流和输出流,以便能够从客户端读取数据并向客户端发送响应。在这个例子中,我们简单地将客户端发送的每个消息转换为大写,并将其发送回去。我们同时也检查是否收到了"BYE",以便关闭连接。
接下来,我们需要创建一个客户端,该客户端将与服务器建立连接并交换消息。以下是一个简单的客户端代码示例:
```java
import java.io.*;
import java.net.*;
public class ChatClient {
public static void main(String[] args) throws IOException {
if (args.length != 1) {
System.err.println("Usage: java ChatClient <host name>");
System.exit(1);
}
String hostName = args[0];
int portNumber = 4444;
try (
Socket socket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))
) {
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("Server: " + in.readLine());
if (userInput.equals("BYE"))
break;
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to " + hostName);
System.exit(1);
}
}
}
```
在上面的代码中,我们首先从命令行参数中获取主机名,然后创建一个Socket对象来连接服务器。我们还创建了三个流对象,分别是用于向服务器发送数据的输出流、用于从服务器接收数据的输入流和用于从标准输入读取数据的输入流。
在while循环中,我们从标准输入读取用户输入,并将其发送到服务器。然后,我们等待服务器响应,并将其输出到标准输出。如果用户输入了"BYE",我们就关闭连接。
现在我们已经完成了聊天程序的编写。您可以在一个终端窗口中运行ChatServer,然后在另一个终端窗口中运行ChatClient,以便模拟客户端和服务器之间的通信。
阅读全文