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

相关推荐
用户3126874877203 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang3 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing3 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员
BingoGo4 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.4.0 发布,新增短信服务能力
后端·php
吃饱了得干活4 小时前
一篇讲清楚Spring Boot:自动装配、启动器、过滤器、拦截器、设计模式
java·spring boot·后端
lhldsg5 小时前
AI零售系统实战指南:从架构设计到落地部署全解析
java·人工智能·小程序·uni-app·零售
草莓熊Lotso5 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
Interview Aid1126 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
mldong6 小时前
换了工作流引擎,前端一行代码没改
java·架构
微尘寒风13 小时前
【Git】的安装和使用
java·git