【Java 网络编程】TCP 服务器端 客户端 简单示例(一)

简介: 【Java 网络编程】TCP 服务器端 客户端 简单示例(一)

I IntelliJ IDEA 创建 Java 项目


Java 程序使用 IntelliJ IDEA 进行开发 ;


创建客户端项目 :


① 菜单栏 File -> New Project , 弹出 New Project 对话框 , 选择 Gradle 类型下的 java 项目 ;

image.png


② 输入 GroupId 和 项目名称 , 一直点击下一步到结束 , 最后一个对话框注意选择项目所在位置 ;

image.png




II 客户端 Socket 创建


创建 Socket 需要设置超时时长 , 要连接的服务器端的端点信息 , 该端点包括 IP 地址和端口号 ;


       

//1. 创建 Socket 对象
            Socket socket = new Socket();
            //2. 设置 Socket 的超时时间
            socket.setSoTimeout(5000);
            //3. 创建连接的端点 , 该端点包括 IP 地址和端口号
            InetSocketAddress inetSocketAddress =
                    new InetSocketAddress(
                            Inet4Address.getLocalHost(),   //本机IP地址
                            8000                      //端口号
                    );




III Socket 客户端连接服务器端


调用 Socket 对象的 connect 方法 , 即可发起对服务器的连接 , 如果连接成功 , 则会继续执行 , 如果连接失败或者超时 , 会抛出异常 ;


     

//4.. 连接服务器端点 , 并设置超时时间
            socket.connect(inetSocketAddress, 5000);



IV Socket 两个端点信息获取


1. 获取服务器端点的 IP 地址和端口号 : 调用 Socket 对象的 getInetAddress 方法获取服务器端 IP 地址 , 调用 getPort 方法获取服务器端的端口号 ;


       

//1. 获取服务器 IP 地址
            InetAddress serverAddress = socket.getInetAddress();
            //2. 获取服务器端口号
            int serverPort = socket.getPort();


2. 获取客户端端点的 IP 地址和端口号 : 调用 Socket 对象的 getLocalAddress 方法 , 可以获取客户端的 IP 地址 , 调用 getLocalPort 方法可以获取客户端的端口号 ;


     

//3. 获取客户端 IP 地址
            InetAddress clientAddress = socket.getLocalAddress();
            //4. 获取客户端端口号
            int clientPort = socket.getLocalPort()

;


V 控制台人机交互


客户端信息获取 ( 人机交互 ) : 控制台中等待用户输入 , BufferedReader 的 readLine 方法 , 可以在控制台中阻塞等待用户输入 , 用户可以在控制台输入信息 , 然后客户端将该信息传给服务器 ; 下面是键盘输入流的创建和使用过程


       

//1. 获取控制台输入流
            InputStream is = System.in;
            //2. 该输入流会阻塞 , 等待用户控制台输入
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            //4. 阻塞命令行 , 等待用户输入一行数据, 并存入 string 对象中
            String string = br.readLine();



VI Socket 客户端与服务器端交互


服务器 -> 客户端 : 客户端阻塞等待服务器端发送数据 , 从 Socket 中获取 BufferedReader 输入流 , 根据输入流创建 BufferedReader , 调用 readLine 方法阻塞等待服务器传回信息 ;


         

//1. 获取服务器端输入流
            cisFromServer = socket.getInputStream();
            //2. 将输入流转为 BufferedReader
            BufferedReader brFromServer = new BufferedReader(new InputStreamReader(isFromServer));
            //6. 阻塞控制台 , 从服务器读取一行数据
            String stringFromServer = brFromServer.readLine()

;


客户端 -> 服务器 : 从 Socket 中获取输出流 OutputStream , 根据该输出流创建 PrintStream , 可以将字符串输出到客户端 ;


         

//4. 获取客户端的输出流 , 用于向服务器端写出数据
            OutputStream os = socket.getOutputStream();
            //5. 创建打印流 , 用于向服务器端写出字符
            PrintStream ps = new PrintStream(os);
            //5. 通过打印流 , 将该字符串传输给服务器端
            ps.println(string);




VII ServerSocket 服务器端端口监听


创建 ServerSocket 对象 , 只需要指定端口即可 , 不需要指定 IP 地址 , 其 IP 地址就是本机的 IP 地址 , 如果机器有多个 IP 地址 , 如果没有指定 IP 地址 , 那么会监听所有的 IP 地址的指定端口号 ;


     

//1. 创建服务器套接字 , 只需要指定端口即可 , 不需要指定 IP 地址
            //      其 IP 地址就是本机的 IP 地址 , 如果机器有多个 IP 地址
            //      如果没有指定 IP 地址 , 那么会监听所有的 IP 地址的指定端口号
            ServerSocket serverSocket = new ServerSocket(8000);




VIII ServerSocket 服务器端参数获取


调用 ServerSocket 对象的 getInetAddress 获取服务器端的 IP 地址 , 调用该对象的 getLocalPort 可以获取服务器端监听的端口号 ;


         

//2. 获取服务器端 IP 地址
            InetAddress inetAddress = serverSocket.getInetAddress();
            //3. 获取服务器端口号
            int localPort = serverSocket.getLocalPort();


目录
相关文章
|
18天前
|
存储 弹性计算 测试技术
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
阿里云服务器ECS实例可以分为多种实例规格族。根据CPU、内存等配置,一种实例规格族又分为多种实例规格。而实例规格又包含vCPU、处理器、内存、vTPM、本地存储、网络带宽、网络收发包PPS、连接数、弹性网卡、云盘带宽、云盘IOPS等指标,本文为大家详细介绍实例规格的这些指标,以供大家了解和选择。
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
|
8天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
55 5
|
11天前
|
数据安全/隐私保护
Haskell网络编程:代理服务器的高级使用技巧
Haskell网络编程:代理服务器的高级使用技巧
|
24天前
|
存储 运维 网络协议
运维的基本概念:服务器和网络基础知识
运维的基本概念:服务器和网络基础知识
46 0
运维的基本概念:服务器和网络基础知识
|
1月前
|
弹性计算 运维 监控
阿里云ECS实例使用示例
使用阿里云ECS实例的流程简便快捷:登录阿里云控制台,在ECS实例列表中选择目标实例并进入详情页,点击“启动”按钮激活实例,确保预装系统和应用完成。运行后,通过控制台监控CPU、内存及磁盘使用情况,如需调整配置,可选择实例后点击“重启”应用新设置。阿里云ECS助力企业轻松上云、高效运维。[1][3] 相关链接:阿里云ECS使用流程 https://startup.aliyun.com/info/1078898.html
|
1月前
|
网络协议 C语言
C语言 网络编程(十)TCP通信创建流程---客户端
在TCP通信中,客户端需通过一系列步骤与服务器建立连接并进行数据传输。首先使用 `socket()` 函数创建一个流式套接字,然后通过 `connect()` 函数连接服务器。连接成功后,可以使用 `send()` 和 `recv()` 函数进行数据发送和接收。最后展示了一个完整的客户端示例代码,实现了与服务器的通信过程。
|
2月前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
69 0
|
安全 JavaScript 前端开发
java基础示例
这篇文章将为大家详细讲解有关java基础之方法的示例分析
|
7天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
21 2
|
11天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
下一篇
无影云桌面