利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。 客户端向服务器端发送请求给服务端,形式如“From 学号 姓名: what time is it ”;服务器端接受到该字符串后将服务器端当前时间返回给客户端,形式如“To 姓名: 当前时间”;客户端向服务器端发送“From 学号 姓名:Exit”命令,服务器端向客户端返回“To 姓名:Bye”后退出。
时间: 2024-03-22 14:37:11 浏览: 111
socket编程,客户端给服务端发送消息
5星 · 资源好评率100%
好的,这是一个比较典型的Socket编程的例子。以下是服务端的代码,你需要在服务器上运行这个代码:
```java
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);
System.out.println("服务器已启动,等待客户端连接...");
} catch (IOException e) {
System.out.println("无法在端口8888启动服务器!");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
System.out.println("客户端已连接,客户端地址:" + clientSocket.getInetAddress());
} catch (IOException e) {
System.out.println("客户端连接出现问题!");
System.exit(1);
}
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("客户端请求:" + inputLine);
String[] input = inputLine.split(" ");
if (input[2].equals("Exit")) {
out.println("To " + input[1] + ":Bye");
break;
} else if (input.length < 4 || !input[0].equals("From") || !input[2].equals(":") || input[3].length() < 1) {
out.println("To " + input[1] + ":请求格式错误");
} else if (input[3].equals("what time is it")) {
out.println("To " + input[1] + ":" + new java.util.Date());
} else {
out.println("To " + input[1] + ":未知请求");
}
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
```
下面是客户端的代码,你需要在本地运行这个代码:
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket clientSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
clientSocket = new Socket("localhost", 8888);
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (UnknownHostException e) {
System.out.println("无法连接服务器!");
System.exit(1);
} catch (IOException e) {
System.out.println("连接服务器出现问题!");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
String serverResponse = in.readLine();
System.out.println(serverResponse);
if (serverResponse.equals("To 姓名:Bye"))
break;
}
out.close();
in.close();
stdIn.close();
clientSocket.close();
}
}
```
你可以在命令行中分别运行服务端和客户端代码,然后在客户端输入命令,与服务端进行通信。注意,你需要将代码中的“姓名”和“学号”替换为你自己的姓名和学号。
阅读全文