# 使用 Java 实现 TCP 中文通信 在现代网络编程中,TCP(传输控制协议)是一种常用的协议,用于确保数据传输的可靠性。当我们需要在 Java 中处理中文时,字符编码的问题则显得尤为重要。本文将详细介绍如何使用 Java 实现 TCP 中文通信,包括整体流程、代码实现和必要的解释。 ## 一、工作流程 在实现 TCP 中文通信之前,我们需要明确整个工作流程。下面是一个简单的步骤展示:
原创 2024-07-31 05:39:04
34阅读
TCP的黏包问题主要分为以下三种情况: 第一种情况:如上图中的第一根bar所示,服务端一共读到两个数据包,每个数据包都是完成的,并没有发生粘包的问题,这种情况比较好处理,服务器只需要简单的从网络缓冲区去读就好了,每次服务端读取到的消息都是完成的,并不会出现数据不正确的情况。第二种情况:服务端仅收到一个数据包,这个数据包包含客户端发出的两条消息的完整信息,这个时候基于第一种情况的逻辑实现的服务端就蒙
转载 2023-11-25 12:58:47
48阅读
粘包只可能出现在流传输中UDP是不会出现粘包,因为他是基于报文的,也就是说UDP发送端调用几次write,接收端必须调用相同次数的read读完,他每次最多只能读取一个报文,报文与报文是不会合并的,如果缓冲区小于报文长度,则多出来的部分会被丢掉。TCP不同了,TCP是基于流传输的,他会合并消息,并且以不确定方式合并,这样就需要我们去粘包处理了。TCP造成粘包主要原因:    1、
转载 2023-07-15 13:22:43
188阅读
案例模型分析:基于TCP实现,一个Clinet(发送端)向,一个Server(接收端)上传图片文件的功能。要求,客户端上上传的图片路径,需要从配置文件.properties文件中读取为了简化并可视结果:客户端和服务端,用本机ip上两个端口模拟即可;定义Socket的时候,本机端口是OS随机分配的;发送的文件类型是图片,用字节流(图片可能很大,这里用缓冲流包装)由于服务器端套接字输入流是一个阻塞方法
转载 2023-06-29 23:54:38
38阅读
1.粘包概念及产生原因1.1粘包概念:TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。粘包可能由发送方造成,也可能由接收方造成。只有TCP有粘包现象,UDP永远不会粘包粘包不一定会发生1.2粘包原因:所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。发送端原因: 由于TCP协议本身的机制(面向
修复,网卡,网上查询,本地连接
原创 2012-02-28 14:14:47
442阅读
net.ipv4.tcp_tw_recycle导致的TCP连接超时
原创 2020-12-30 17:38:57
10000+阅读
1点赞
为什么 TCP 协议有粘包问题TCP/IP 协议簇建立了互联网中通信协议的概念模型,该协议簇中的两个主要协议就是 TCP 和 IP 协议。这两个协议不仅能够保证数据会从源机器的源进程发送到目标机器的目标进程中,还能保证数据的不重不漏以及发送的顺序。TCP/ IP 协议簇中的 TCP 协议能够保证数据段(Segment)的可靠性和顺序,有了可靠的传输层协议之后,应用层协议就可以直接使用 TCP 协议
原创 2023-07-14 16:16:07
79阅读
TIME WAIT 带来的问题 先引用一个名言: The TIME_WAIT state is our friend and is there to help us (i.e., to let old duplicate segments expire in the network). Instea
转载 2022-06-29 22:55:31
165阅读
 看到网上有人提到这个问题,搜索一下可以找到几个pdf论文,好像还都是国人写的,这里有文章写得不错TCP incast: What is it? How can it affect Erlang applications?http://www.snookles.com/slf-blog/2012/01/05/tcp-incast-what-is-it/ 在集群通讯中,多个机器的
TCP粘包问题首先要明确, 粘包问题中的 “包” , 是指的应用层的数据包;在TCP的协议头中, 没有如同UDP一样的 “报文长度” 这样的字段, 但是有一个序号这样的字段;站在传输层的角度, TCP是一个一个报文过来的,按照序号排好序放在缓冲区中;站在应用层的角度, 看到的只是一串连续的字节数据. 那么应用程序看到了这么一连串的字节数据, 就不知道从哪个部分开始到哪个部分是一个完整的应...
原创 2022-11-07 19:08:59
145阅读
问题描述: Docker容器映射到宿主机后,查询端口连接只有tcp6没有tcp,通过ipv4地址连接时无法连接成功。 处理方法: 1.检查是否开启ipv4端口转发 1 sysctl net.i
转载 2021-07-07 09:25:00
4854阅读
2评论
本文使用 Wireshark 抓包工具,Windows Telnet 客户端以及 Java 编写的 EchoServer 程序,验证了 TCP 中的三次握手和四次挥手的过程。除此以外,本文还为大家展示了著名的半关闭状态。 简介想要理解 TCP 的三次握手和四次挥手和 Java Socket,首先需要掌握 TCP 的报头结构(传送门)。如下图所示:00~3
转载 2024-06-14 15:32:15
87阅读
1.TCP Socket在Java上的实现JavaTCP 协议提供了两个类:Socket 类和 ServerSocket 类。一个 Socket 实例代表了TCP 连接的一端。一个 TCP 连接(TCP connection)是一条抽象的双向信道,两端分别由 IP地址和端口号确定。在开始通信之前,要建立一个 TCP 连接,这需要先由客户端 TCP 向服务器端 TCP 发送连接请求。Serve
转载 2023-06-07 16:16:26
103阅读
最近帮同事解决了一个诡异的TCP连接问题,最终找到的原因是程序在fork时的一个bug。   现象是这样的:两个进程A和B通过TCP建立Socket连接,运行不定长时间后A发现B断开了,但B进程一直都在,从来没有退出过,而且TCP连接仍然是ESTABLISHED状态。 A进程里的log: 2012-01-07T20:18:51.502162Z [warn] multiaccept
原创 2012-01-29 20:38:34
2094阅读
1、A进程通过TCP向另一台机器上的B进程发送了一个字符串“hello”,TCP返回对方成功接收的确认信息,请问,现在进程A是否可以肯定地说进程B收到了它发送的字符串?答案:不能!举反例,进程B所在机器的TCP收到进程A发送的“hello”信息后,告诉进程A发送成功,但有可能没有立即将数据交给进程B,而是放在自己的缓冲区中,等待进程B读取,如果机器此时突然掉电,缓冲区中的信息将丢失,进程B将不可能
TCP
原创 2020-08-06 18:18:46
10000+阅读
1评论
创建虚拟CAN接口在Linux上能使用虚拟CAN接口之前,需要在终端执行以下三个步骤:加载vcan内核模块: sudo modprobe vcan创建虚拟CAN接口: sudo ip link add dev vcan0 type vcan将虚拟CAN接口处于在线状态: sudo ip link set up vcan0 或 sudo ip link set dev vcan0 up将虚拟CAN接
转载 4月前
29阅读
HUB没通电,或是机器后面的网线没插上的情况下,OS 会自动在任务栏上显示一个“网线断开”的图标,并且将该网卡的所有协议层退出,这时你PING网卡的IP将无回应。这个功能叫做网卡的“媒介探测(Media Sense)”,你需要关掉它。  这样,即使网线断开,OS仍然会显示一个断开的图标,但网卡的协议仍然处于绑定状态,也就是说PING网卡的IP仍然能通。为防止网络适配
粘包问题分析与对策TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。 出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。什么时候需要考虑粘包问题?如果利用tcp每次发送数据,就与对方建立连接,然后双方发送完一段数据后,就关闭连接,这样就不会出现粘包问题(因为只有一种包结构,类似于http协议)。关闭连接主要是要双方
最近发现自己对于TCP通讯中的黏包问题还有疑问,查阅资料做下总结。 一、TCP黏包问题 TCP黏包问题是因为发送方把若干数据发送,接收方收到数据时候黏在一包,从接受缓冲区来看,后一包的数据黏在前一包的尾部。 二、黏包出现的原因 TCP黏包问题主要出现在两个方面 (1)发送方问题 首先TCP会默认使用Nagle算法,Nagle算法主要做两件事。 第一:上一包分组得到确认,才会发送下一分组。
转载 2023-11-24 19:03:02
48阅读
  • 1
  • 2
  • 3
  • 4
  • 5