[进阶]网络通信:TCP通信,一发一收,多发多收

news/2024/11/24 20:51:53/

TCP通信

  • 特点:面向连接、可靠通信
  • 通信双方事先会采用 “三次握手〞 方式建立可靠连接,实现端到端的通信;底层能保证数据成功传给服务端。
  • Java提供了一个java.net.socket类来实现TCP通信。

TCP通信——客户端开发

  • 客户端程序就是通过java.net包 下的Socket类来实现的。

 

 

 代码演示如下:

public class Client {public static void main(String[] args) throws Exception{System.out.println("客户端开启!");//1.创建Socket对象,并同时请求与服务端程序的连接。Socket socket = new Socket("127.0.0.1",8888);//2.从socket通信管道中得到一个字节输出流。用来发数据给服务端程序OutputStream os = socket.getOutputStream();//3.把低级的字节输出流包装成数据输出流DataOutputStream dos = new DataOutputStream(os);//4.开始写数据出去了dos.writeUTF("你好,Java!");dos.close();socket.close(); // 释放连接资源}
}

TCP通信——服务端的开发

  • 服务端是通过java.net包 下的Serversocket类来实现的。

 

 代码演示如下:

public class Server {public static void main(String[] args) throws Exception{System.out.println("服务端开启!");//1.创建ServerSocket的对象,同时为服务端注册端口。ServerSocket serverSocket = new ServerSocket(8888);//2.使用serverSocket对象,嗲用一个accept方法,等待客户端的连接请求Socket socket = serverSocket.accept();//3.从socket通信管道中得到一个字节输入流InputStream is = socket.getInputStream();//4.把原始的字节输入流包装成数据输入流DataInputStream dis = new DataInputStream(is);//5.使用数据输入流读取客户端发送过来的消息String rs = dis.readUTF();System.out.println(rs);//还可以获取客户端的IP地址System.out.println(socket.getRemoteSocketAddress());dis.close();socket.close();}
}

实现多发多收,就要把代码改成循环。具体演示看下面部分代码:
客户端:

public class Client {public static void main(String[] args) throws Exception{System.out.println("客户端开启!");//1.创建Socket对象,并同时请求与服务端程序的连接。Socket socket = new Socket("127.0.0.1",8888);//2.从socket通信管道中得到一个字节输出流。用来发数据给服务端程序OutputStream os = socket.getOutputStream();//3.把低级的字节输出流包装成数据输出流DataOutputStream dos = new DataOutputStream(os);Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入:");String msg = sc.nextLine();//一旦用户输入了exit,就退出客户端程序if ("exit".equals(msg)){System.out.println("退出成功!");dos.close();socket.close();break;}//4.开始写数据出去了dos.writeUTF(msg);dos.flush();}}
}

服务端:

public class Server {public static void main(String[] args) throws Exception{System.out.println("服务端开启!");//1.创建ServerSocket的对象,同时为服务端注册端口。ServerSocket serverSocket = new ServerSocket(8888);//2.使用serverSocket对象,嗲用一个accept方法,等待客户端的连接请求Socket socket = serverSocket.accept();//3.从socket通信管道中得到一个字节输入流InputStream is = socket.getInputStream();//4.把原始的字节输入流包装成数据输入流DataInputStream dis = new DataInputStream(is);while (true) {try {//5.使用数据输入流读取客户端发送过来的消息String rs = dis.readUTF();System.out.println(rs);} catch (Exception e) {System.out.println(socket.getRemoteSocketAddress() + "离线了~");dis.close();socket.close();}}}
}

http://www.ppmy.cn/news/515346.html

相关文章

秒懂SpringBoot之如何集成SpringDoc(全网目前最新最系统最全面的springdoc教程)

[版权申明] 非商业目的注明出处可自由转载 出自:shusheng007 文章目录 概述概念解释SpringDoc使用简单集成配置文档信息配置文档分组使用注解TagOperationSchemaParameterParametersApiResponses 和ApiResponse 认证授权无需认证需要认证 总结源码 概述 近来颇为懈…

MySQL——存储过程与存储函数

MySQL从5.0版本开始支持存储过程和存储函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可。 1. 存储过程概述 1.1 理解 含义:存储过程的英文是 S…

芯力特CAN接口芯片,SIT1050T参数及描述

完全兼容“ISO 11898”标准; 内置过温保护; 过流保护功能; 显性超时功能; 静音模式:未上电节点不干扰总线; 至少允许 110 个节点连接到总线; 高速 CAN,传输速率可达到 1Mbps&#xf…

上海航芯 |带CAN的128k Flash通用MCU ACM32F0优势

• 车规级工艺(-40到125度), 消费级价格,适用于户外或者高温宽范围的严苛场景 • 带CAN的128k flash F0,适用于需要CAN的车载或者工业场景 • 断码LCD触控超低功耗,适用于低功耗物联网场景 • 2个QSPI,8根SPI数据线,适…

C8051F500 C8051F50X CAN总线收发数据 中文寄存器

** C8051F500 C8051F50X CAN总线收发数据中文寄存器 ** 一、最近手头有一个汽车项目用到CAN总线进行通信,使用的芯片是C8051F500;这个芯片具有CAN 2.0协议;它和早期的C8051F04X和06x的使用和寄存器的定义有些不同; C8051F50X的寄…

HC32L110国产超低功耗华大MCU芯片介绍

华大HC32L110 系列32 位 ARM Cortex-M0 微控制器 HC32L110 系列是一款旨在延长便携式测量系统的电池使用寿命的超低功耗、Low Pin Count、宽电压工作范围的 MCU。集成 12 位 1M sps 高精度 SARADC 以及集成了比较器、多路 UART、SPI、I 2 C等丰富的通讯外设,具有高…

ASEMI代理NXP汽车芯片MKE02Z32VLC4

编辑-Z NXP汽车芯片MKE02Z32VLC4参数: 型号:MKE02Z32VLC4 资格状态:M完全合格的一般市场流量,P资格预审 动脉炎家族:KE02型 关键点属性:Z M0 core 程序闪存大小:16 16 KB,32…

HC32L136国产超低功耗华大MCU芯片介绍

华大HC32L136 系列32 位 ARM Cortex-M0 微控制器 HC32L136 系列是一款旨在延长便携式测量系统的电池使用寿命的超低功耗、宽电压工作范围的 MCU。集成 12 位 1M sps 高精度 SARADC,以及集成了比较器、运放、内置高性能 PWM 定时器、LCD 显示、多路 UART、SPI、I2C …