首页 > 其他分享 >9月27日总结

9月27日总结

时间:2023-10-03 14:34:01浏览次数:40  
标签:总结 27 Socket TCP 发送 拥塞 链接 客户端

在之前的文章《网络编程杂谈之TCP协议》中,我们阐述了TCP协议的基本概念,TCP作为一种可靠的、面向连接的数据传输协议,确保了数据在发送和接收之间的可靠性、顺序性和完整性,特点可以概括如下:

1、面向连接:在进行数据传输之前,TCP需要客户端和服务器之间建立一个连接,这个连接包括一系列的握手和协商步骤,以确保通信双方都准备好进行数据传输。

2、可靠性:TCP是一种可靠的协议,它使用各种机制来确保数据的可靠传输,包括数据分段的确认和重传机制,以及流量控制等多种手段。

3、顺序性:TCP保证数据段的到达顺序与发送顺序相同,即使数据在传输过程中被拆分成多个数据包,接收方也会将它们按照正确的顺序重新组装,比如说链接的一方发了ABC,那么接收的一方收到的也一定是ABC。

4、流量控制:TCP使用滑动窗口协议来实现流量控制,确保了发送方不会以超过接收方处理能力的速度发送数据,从而避免了数据丢失和网络拥塞。

5、拥塞控制:TCP还具有拥塞控制机制,它可以检测到网络中的拥塞并采取相应的措施来减轻拥塞,从而实现降低发送速率和重新发送丢失的数据包。

6、面向字节流:TCP是面向字节流的协议,它不会保留消息边界。这意味着接收方需要自行解析和分割接收到的字节流,以还原原始消息。

7、可靠的错误检测和纠正:TCP具有强大的错误检测和纠正机制,它可以检测并纠正在数据传输过程中出现的错误,以确保数据的完整性。

8、全双工通信:TCP支持全双工通信,所谓全双工是指建立连接后,通信双方可以同时发送和接收数据,而不需要等待对方的响应。

9、Socket(套接字):TCP使用端口号来标识不同的应用程序或服务,通信的两端通过IP地址和端口号来建立连接,而套接字(Socket)就是对其中任意一端的抽象,分为服务器端套接字(Server Socket)或客户端套接字(Client Socket),分别用于服务器和客户端的通信。

总的来说,TCP协议作用于传输层且适用于大多数需要可靠数据传输的应用程序,如文件传输、上位机通信等,并可以做为其他应用层协议的实现基础,如HTTP、MQTT等。

在代码实现层面,Socket是指一种编程接口(API),不同开发语言基本上都围绕Socket提供了一组用于创建、连接、发送和接收数据的API。下面我们以Java为例,通过java.net包下提供的Socket操作API与 java.io包下提供的IO操作API, 实现一个基本的TCP服务端与客户端的监听、链接并进行消息收发的示例。
服务端

在TCP服务端的实现中我们需要先定义一个ServerSocket对象,并实现对指定IP与端口号的绑定与监听,这里需要注意的是如果一直没有客户端链接,serverSocket.accept会一直处在阻塞状态,一旦有客户端链接事件发生才会向下执行,而服务需要满足与多个客户端进行链接,这也是为什么我们需要一个while (true)去一直轮询执行,因为我们其实是不知道客户端什么时候会链接上来的,下面的读写操作也是同一个道理, 所以为了不影响主线程accept新的客户端,我们把完成链接的Socket开启一个独立的线程或者抛给线程池来处理后续IO读写操作,这是一种典型的BIO(Blocking I/O)即阻塞IO的处理模式。

public class BioServer {

public static void main(String[] args) throws IOException{  
     
   ExecutorService executor = new ThreadPoolExecutor(2, 4, 1000, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10),  
         new ThreadPoolExecutor.CallerRunsPolicy());  
   ServerSocket serverSocket = new ServerSocket();  

标签:总结,27,Socket,TCP,发送,拥塞,链接,客户端
From: https://www.cnblogs.com/lmyy/p/17741119.html

相关文章

  • 9月26日总结
    .NET周刊【9月第4期2023-09-24】合集-.NET周刊(8)1..NET周刊【8月第1期2023-08-06】08-102..NET周刊【8月第2期2023-08-14】08-183..NET周刊【8月第3期2023-08-20】08-284..NET周刊【8月第4期2023-08-27】08-315..NET周刊【9月第1期2023-09-03】09-086..NET周......
  • 9月25日总结
    概述主成分分析(PrincipalComponentAnalysis,PCA)是一种常用的数据降维和特征提取技术,用于将高维数据转换为低维的特征空间。其目标是通过线性变换将原始特征转化为一组新的互相无关的变量,这些新变量称为主成分,它们按照方差递减的顺序排列,以保留尽可能多的原始数据信息。主成分分......
  • 9月29日总结
    以OpenAI的ChatGPT所掀起的GenAI快速创新浪潮,其中连接LLM和应用之间的桥梁的两大开源项目:LangChain[1]和SemanticKernel[2],在半年前写过一篇文章LangChainvsSemanticKernel[3],这半年以来Semantickernel有了显着改进,这篇文章反应了最新的更新。SemanticKernel(SK)是......
  • 9月28日总结
    能够对于文字、段落乃至任何元素的精准定位并做出增删改查,都是在开发一款富文本编辑器时一项最基本也是最重要的功能之一。让我们先来看看Slate中对于如何在文档树中定位元素是怎么定义的[源码]:/**TheLocationinterfaceisaunionofthewaystorefertoaspecificloca......
  • 9.30每日总结
    今天是到家的第二天,首先我是不负众望地昏迷不醒,然后十二点出门觅食,下午去配了一副我日思夜想的黑框眼镜,顺便去磨了一个刀,晚上在电视中学习重要的人生经验,体味丰富的人生状态今天我学到了:如果人十二点之后起床,那么假期会变少~(>_<)~......
  • 9.28每日总结
    今天是回家的前一天晚上上午我学到了统一建模语言中关于图的定制,学习了乒乓球的姿势下午学习了数据结构中的队列,复习了栈,学习了离散数学中的闭包运算与集合运算晚上学习了营养与健康,收拾东西逃离河北(doge今天我学到了:东西要提前收拾,否则会使人手忙脚乱 ......
  • CodeForces-1276#B 题解
    正文这是样例1第1组数据的图。让我们观察一下,路径1->6、1->7、2->6、2->7是可行的,所以答案为4。上述路径中好像点4没有贡献?再看看样例1第2组数据的图。发现点1和点4相互之间存在其他路径,无需经过点\(a\)和点\(b\)。综上,我们可以知道:在\(a\)和\(b\)......
  • 洛谷5343总结
    这题我们很容易想出一个状态,设f[i][j]表示前i个长度划分长度为j的块的总方案然后我们自信的写出\(f[i][j]=f[i-1][j]+f[i][j-a[i]]\)但这其实是错的!这跟背包很想,+f[i][j-a[i]]这一项的本质是说这个长度为j的块的最后一段的长度是a[i],但其实最后一段的长度是不定的,所以我们可以写......
  • 2023信友队提高组复赛冲刺班 10.2赛后总结
    T1:区块链赛场上还以为很难,直接打表,80pts。本来以为还不错,结果一堆人AC,吐血!算了,还是来说说正解吧,说多了都是血和泪啊啊啊!先对开头的公式进行变形,得到:nb/(b-n)xorb=a通过大量的样例我们可以发现,当b=n+1时,nb/(b-n)取到最大值这是为什么呢?我们可以来证明一下:∵ nb/(b-n)是......
  • C++ STL 一般总结
    以下内容来源网上经过整合而成一、一般介绍     STL(StandardTemplateLibrary),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++StandardLibrary)中,是ANSI/ISOC++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里......