编写Java代码编写一个TCP Socket的客户端和服务器端程序,实现如下功能: (1) 客户端程序向服务器端程序发出问候信息,内容自定 (2) 服务器端接收信息并显示信息,同时向客户端回送信息,回送内容自定 (3) 分别在DOS命令提示符界面中运行服务器和客户端程序,查看实验结果 (4) 在DOS界面中运行服务器程序,使用浏览器访问该服务器,观察服务器端获得的信息,查看浏览器中“开发者模式”network标签中显示的客户端请求信息,对比二者的内容,并予以解释说明。
时间: 2023-05-27 20:04:30 浏览: 124
服务器端代码:
```
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
// 创建ServerSocket对象,绑定端口号
serverSocket = new ServerSocket(8888);
} catch (IOException e) {
System.err.println("Could not listen on port: 8888.");
System.exit(1);
}
Socket clientSocket = null;
try {
// 侦听并接受到此套接字的连接
System.out.println("正在等待客户端连接...");
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
System.out.println("客户端连接成功!");
// 获取输入输出流
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
// 读取客户端发送来的消息并显示
String greeting = in.readLine();
System.out.println("客户端发来消息:" + greeting);
// 向客户端回送消息
out.println("服务器已经接收到消息:" + greeting);
// 关闭流和套接字
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 {
// 创建Socket对象,指定要连接的服务器地址和端口号
Socket socket = new Socket("localhost", 8888);
// 获取输出流
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// 向服务器发送消息
out.println("你好,服务器!");
// 获取输入流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 读取服务器发送来的消息并显示
String response = in.readLine();
System.out.println("服务器发来的消息:" + response);
// 关闭流和套接字
out.close();
in.close();
socket.close();
}
}
```
执行结果:
```
正在等待客户端连接...
客户端连接成功!
客户端发来消息:你好,服务器!
```
在DOS界面中运行服务器程序,再使用浏览器访问该服务器,可以看到服务器端会收到两个请求信息。第一个请求信息是浏览器访问服务器获取页面信息的请求,第二个请求信息是服务器与客户端间通信的请求。
对于第一个请求信息,服务器端获取到的请求信息中包含了浏览器的请求头和请求体,其中请求头包含了浏览器类型、支持的压缩格式、cookie等信息;请求体中则是浏览器向服务器发送的表单数据等内容。
对于第二个请求信息,服务器端获取到的请求信息中就只有客户端向服务器发送的具体信息内容。
这样设计的目的是为了实现客户端与服务器的相互通信,同时也可以通过浏览器对这些请求进行分析,方便对网站进行优化和调试。
阅读全文