任务
1、编写一个简单的 TCP 客户端 TCPClient.java。
2、使用网络调试助手建立一个 TCP Server。然后运行 TCPClient.java 连接该 TCP Server
- 注意:服务器向客户端发送信息时,因为客户端使用 hasNextLine() 方法,所以服务器端发送的消息需带回车换行,客户端才能将消息读出。
- 在网络调试助手中使用 Shift+Enter 加回车换行。
3、使用网络工具(netstat -an或资源监视器等)查看 TCPClient.java 客户端使用什么端口连接用网络调试助手新建的 TCP 服务器?查看客户端与服务器端对应的进程名是什么?分别使用了哪两个端口进行通信?怎么证明是这两个进程在进行通信?
4、怎么解决客户端、服务器端的中文乱码问题?
实验报告
1、TCPClient.java:
java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.Charset; // 引入Charset类
public class TCPClient {
public static void main(String[] args) {
String hostname = "127.0.0.1";
int portNumber = 8080;
connectToHTTPSever(hostname, portNumber);
}
private static void connectToHTTPSever(String hostname, int portNumber) {
try (Socket s = new Socket(hostname, portNumber);
// 输入流:用Charset.forName("GBK")获取编码对象
BufferedReader in = new BufferedReader(
new InputStreamReader(s.getInputStream(), Charset.forName("GBK")));
// 输出流:PrintWriter构造方法需要Charset类型,所以用Charset.forName("GBK")
PrintWriter out = new PrintWriter(
s.getOutputStream(), true, Charset.forName("GBK"))) {
out.println("hi");
out.println("中文");
out.println("hello world!");
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (UnknownHostException e) {
System.err.println("输入的主机名未知");
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
2、运行结果如下:

3、
1)打开命令行(win+R,输入cmd)
2)输入命令:C:\Users\Administrator>netstat -an|find "8080"
3)输出结果如下:

当前状态:
- 本地8080端口是服务端,正在运行(网络调试助手);
- TCPClient客户端(本地57340端口)已经和它建立了连接;
- 同时电脑还连接了两个外部服务器的 8080 端口。
4、把TCPClient.java里的编码输入格式改为GBK。