[Java]实验--编写TCP客户端程序

任务

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。

相关推荐
步菲8 小时前
springboot canche 无法避免Null key错误, Null key returned for cache operation
java·开发语言·spring boot
毕设源码-朱学姐8 小时前
【开题答辩全过程】以 基于SpringBoot的中医理疗就诊系统为例,包含答辩的问题和答案
java·spring boot·后端
2201_7578308712 小时前
全局异常处理器
java
小徐Chao努力13 小时前
【Langchain4j-Java AI开发】09-Agent智能体工作流
java·开发语言·人工智能
Coder_Boy_13 小时前
SpringAI与LangChain4j的智能应用-(理论篇3)
java·人工智能·spring boot·langchain
Coder_Boy_14 小时前
基于SpringAI的智能平台基座开发-(六)
java·数据库·人工智能·spring·langchain·langchain4j
伯明翰java14 小时前
Java数据类型与变量
java·开发语言
想用offer打牌15 小时前
如何开启第一次开源贡献之路?
java·后端·面试·开源·github
小许学java15 小时前
Spring原理
java·spring·生命周期·作用域·原理
教练、我想打篮球15 小时前
122 Hession,FastJson,ObjectInputStream的序列化反序列化相同引用的处理
java·config·utils