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

相关推荐
JAVA面经实录9171 天前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
许彰午1 天前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
数据法师1 天前
开源情报收集工具GhostTrack深度测评:IP、手机号、用户名的合规信息查询方案
网络·网络协议·tcp/ip
Bat U1 天前
JavaEE|多线程初阶(七)
java·开发语言
想成为优秀工程师的爸爸1 天前
第三十篇技术笔记:郭大侠学UDS - 人有生老三千疾,望闻问切良方医
网络·笔记·网络协议·tcp/ip·信息与通信
掌心向暖RPA自动化1 天前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
日取其半万世不竭1 天前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
TeamDev1 天前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入
AI人工智能+电脑小能手1 天前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
dog2501 天前
圆锥曲线和二次曲线
开发语言·网络·人工智能·算法·php