当前位置: 首页 > news >正文

JAVA学习-网络编程.TCP

        TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它在Java网络编程中被广泛应用。TCP通信可以确保数据的可靠传输,并且具有一定的顺序性。

一、Java中实现TCP通信主要有以下几种方式:

1. Socket类:

Socket类是Java提供的最基本的用于实现TCP通信的类。通过Socket类可以创建客户端和服务器端的Socket,并通过输入输出流进行数据的传输。

2. ServerSocket类:

ServerSocket类用于在服务器端监听客户端的连接请求,并创建Socket对象与客户端进行通信。

3. NIO(New I/O):

Java提供了NIO用于实现更高效的IO操作。NIO中的Channel和Buffer可以实现非阻塞的网络通信,提高了系统的吞吐量和响应性能。

二、TCP通信的特点包括:

1. 面向连接:

TCP通信使用三次握手建立连接,并且在通信过程中保持连接状态,确保数据的可靠传输。

2. 可靠性:

TCP协议通过序号和确认应答机制保证数据的可靠传输,并且自动重传丢失的数据。

3. 有序性:

TCP协议保证数据按照发送的顺序进行传输,不会出现乱序的情况。

三、使用TCP通信的基本步骤如下:

1. 服务器端创建ServerSocket对象,并指定端口号。

2. 服务器端调用accept()方法监听客户端的连接请求。

3. 客户端创建Socket对象,并指定服务器端的IP地址和端口号。

4. 服务器端与客户端建立连接后,通过输入输出流实现数据的传输。

5. 客户端向服务器端发送请求数据,服务器端接收并处理请求。

6. 服务器端向客户端返回响应数据,客户端接收并处理响应。

四、与其他通信方式相比,TCP通信具有以下优点:

1. 可靠性:

TCP协议使用确认应答机制和重传机制,可以确保数据的可靠传输。

2. 有序性:

TCP协议保证数据按照发送的顺序进行传输,不会出现乱序的情况。

3. 流式传输:

TCP协议可以将数据分成小块进行传输,无需关心数据的大小。

4. 支持双向通信:

TCP通信可以实现客户端和服务器端的双向通信。

五、高级应用中,可以使用多线程实现多个客户端同时与服务器端进行通信,也可以通过使用NIO提高网络通信的性能和并发能力。

以下是一个简单的TCP通信示例代码:

服务器端代码:

import java.io.*;
import java.net.*;public class Server {public static void main(String[] args) {try {// 创建ServerSocket对象并绑定端口号ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服务器已启动,等待客户端连接...");// 监听客户端的连接请求Socket clientSocket = serverSocket.accept();// 获取输入流,用于接收客户端发送的数据InputStream is = clientSocket.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);// 获取输出流,用于向客户端发送数据OutputStream os = clientSocket.getOutputStream();PrintWriter pw = new PrintWriter(os);// 接收客户端发送的数据String data = br.readLine();System.out.println("客户端发送的数据:" + data);// 向客户端发送响应数据pw.println("Hello, I'm server!");pw.flush();// 关闭流和Socket连接pw.close();os.close();br.close();isr.close();is.close();clientSocket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}
}

客户端代码:

import java.io.*;
import java.net.*;public class Client {public static void main(String[] args) {try {// 创建Socket对象并指定服务器端的IP地址和端口号Socket socket = new Socket("localhost", 8888);// 获取输入流,用于接收服务器端发送的数据InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);// 获取输出流,用于向服务器端发送数据OutputStream os = socket.getOutputStream();PrintWriter pw = new PrintWriter(os);// 向服务器端发送数据pw.println("Hello, I'm client!");pw.flush();// 接收服务器端发送的数据String data = br.readLine();System.out.println("服务器发送的数据:" + data);// 关闭流和Socket连接pw.close();os.close();br.close();isr.close();is.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}

        以上代码实现了一个简单的TCP通信示例,服务器端监听客户端的连接请求,接收客户端发送的数据并返回响应,客户端与服务器端建立连接后,发送数据,并接收服务器的响应。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

http://www.lryc.cn/news/326216.html

相关文章:

  • [Android]创建Google Play内购aab白包
  • 大数据基础:Linux基础详解
  • unity中 鼠标按下移动端与pc端的位置
  • 增强现实(AR)在广告中的力量
  • 日志收集监控告警平台的选型思考
  • 苹果Find My产品需求增长迅速,伦茨科技ST17H6x芯片供货充足
  • 题目:忐忑楼梯Ⅱ
  • TS函数类型
  • 数据链路层(四):数据链路层协议
  • #Linux系统编程(孤儿进程及僵尸进程以及wait函数)
  • 苍穹外卖项目-01(开发流程,介绍,开发环境搭建,nginx反向代理,Swagger)
  • 学习笔记(16)函数防抖和节流
  • 【揭秘】空号检测平台挑选秘籍:让每一分钱都花在“刀刃”上
  • Linux源码包安装
  • 【P1328】[NOIP2014 提高组] 生活大爆炸版石头剪刀布
  • 查看k8s中的secret
  • [深度学习]yolov8+pyqt5搭建精美界面GUI设计源码实现五
  • C# get set 访问器
  • 【OpenGL】使用 python + Qt + OpenGL 的现代渲染
  • vlan、三层交换机、网关、DNS、子网掩码、MAC地址详解
  • 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记11:数字电位器MCP4017
  • CTF题型 nodejs(1) 命令执行绕过典型例题
  • Mybatis在SpringBoot中是如何被加载执行
  • 数据采集用,集成了主流工业通讯协议
  • Django(三)-搭建第一个应用(2)
  • 求助:配置脚手架代理,跨域问题proxyTable配置无效,访问后显示404?
  • 【4月】组队打卡《山有木Python特征工程极简入门》
  • Wireshark 抓包
  • c语言运算符优先级
  • 纳斯达克大屏媒体尺寸与投放费用:一次投放需要多少钱?