[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。

相关推荐
程序员敲代码吗3 小时前
如何通过命令行启动COMSOL的参数化、批处理和集群扫描
java·c#·bash
MX_93594 小时前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
市场部需要一个软件开发岗位4 小时前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
历程里程碑4 小时前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
程序员泠零澪回家种桔子4 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
CodeCaptain4 小时前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
Trouvaille ~5 小时前
TCP Socket编程实战(三):线程池优化与TCP编程最佳实践
linux·运维·服务器·网络·c++·网络协议·tcp/ip
Anastasiozzzz5 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
骇客野人5 小时前
通过脚本推送Docker镜像
java·docker·容器
铁蛋AI编程实战6 小时前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python