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

相关推荐
CV_J6 小时前
安装kibana
java·elasticsearch·spring cloud·docker·容器
码农水水8 小时前
国家电网Java面试被问:TCP的BBR拥塞控制算法原理
java·开发语言·网络·分布式·面试·wpf
qq_336313938 小时前
java基础-网络编程-TCP
java·网络·tcp/ip
咕噜咕噜啦啦9 小时前
Java期末习题速通
java·开发语言
盐真卿9 小时前
python2
java·前端·javascript
Root_Hacker10 小时前
include文件包含个人笔记及c底层调试
android·linux·服务器·c语言·笔记·安全·php
一嘴一个橘子10 小时前
mybatis - 动态语句、批量注册mapper、分页插件
java
组合缺一10 小时前
Json Dom 怎么玩转?
java·json·dom·snack4
危险、10 小时前
一套提升 Spring Boot 项目的高并发、高可用能力的 Cursor 专用提示词
java·spring boot·提示词
kaico201810 小时前
JDK11新特性
java