用java编写一个TCP Socket的客户端和服务器端程序,实现如下功能: (1) 客户端程序向服务器端程序发出问候信息,内容自定 (2) 服务器端接收信息并显示信息,同时向客户端回送信息,回送内容自定 (3) 分别在DOS命令提示符界面中运行服务器和客户端程序,查看实验结果 (4) 在DOS界面中运行服务器程序,使用浏览器访问该服务器,观察服务器端获得的信息,查看浏览器中“开发者模式”network标签中显示的客户端请求信息,对比二者的内容,并予以解释说明。
时间: 2023-05-27 10:03:08 浏览: 149
我们可以先从客户端开始编写。客户端需要使用Socket对象连接服务器,然后向服务器发送问候信息。接下来等待服务器的回复,并将其显示出来。
客户端代码如下:
```java
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 6666);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF("Hello server!");
out.flush();
DataInputStream in = new DataInputStream(socket.getInputStream());
System.out.println("Server response: " + in.readUTF());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在这个示例中,我们使用了DataInputStream和DataOutputStream来与服务器进行通信。这两个类可以方便地读取和写入带类型标记的数据。
接下来我们编写服务器端代码。服务器端需要使用ServerSocket对象来监听来自客户端的连接请求。一旦一个连接请求到达,服务器就可以创建一个新的Socket对象与客户端进行通信。服务器接受来自客户端的问候信息,并回复一条信息。
服务器代码如下:
```java
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(6666);
System.out.println("Server started...");
Socket socket = serverSocket.accept();
DataInputStream in = new DataInputStream(socket.getInputStream());
System.out.println("Client message: " + in.readUTF());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF("Hello client!");
out.flush();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
我们在这里使用了ServerSocket和Socket对象来建立连接。通过调用ServerSocket的accept方法,服务器开启监听并等待客户端的连接。一旦有连接请求到达,服务器就可以获取Socket对象,并读取来自客户端的数据。然后服务器向客户端发送一条消息,然后关闭连接。
在DOS命令提示符界面中启动服务器程序,然后启动客户端程序。可以看到服务器输出了“Client message: Hello server!”,并向客户端发送了“Hello client!”。客户端输出了“Server response: Hello client!”。
在DOS命令提示符界面中运行服务器程序,使用浏览器访问该服务器,可以看到服务器端接收了HTTP请求:
```
GET / HTTP/1.1
Host: localhost:6666
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
```
可以看到浏览器正在尝试访问默认的首页,但我们的服务器程序并未处理这个请求,因此返回的是404 Not Found。
至此,我们实现了一个简单的TCP Socket通信。这种通信方式可以用于很多场景,包括客户端-服务器、应用程序间通信等。
阅读全文