Socket网络连接详解

合集下载

EBT3001串口转以太网芯片Socket功能详解

EBT3001串口转以太网芯片Socket功能详解

EBT3001串口转以太网芯片Socket功能详解TCP服务器模式TCP Server 即TCP 服务器。

在TCP Server 模式下,设备监听本机端口,接受客户端的连接请求并建立连接进行数据通信。

在关闭Modbus 网关功能时,设备将串口接收到的数据发送给所有与设备建立连接的客户端设备,最多支持连接6 路客户端,启用Modbus 网关功能后非Modbus 数据将会被清除不进行转发。

通常用于局域网内与TCP 客户端的通信。

TCP客户端模式TCP Client 即TCP 客户端。

设备工作时将主动向服务器发起连接请求并建立连接,用于实现串口数据和服务器数据的交互。

使用客户端需要配置准确配置目标的IP 地址/域名、目标端口。

UDP服务器模式UDP Server 是指设备使在用UDP 协议通信时不验证数据来源IP 地址,每收到一个UDP 数据包后,保存数据包的源IP 地址以及源端口,且将其设置为目标IP 及端口,所以设备发送的数据只向最后一次设备接收数据的源IP 地址及端口发送数据包。

此模式通常用于多个网络设备与本设备通信,且频率较高,TCP Server 无法满足条件的场景。

使用UDP Server 需要远程UDP 设备先发送数据,否则无法正常发送数据。

【注】UDP 模式下,网络向设备下发数据应小于512Bit 每包,否则会造成数据丢失。

UDP客户端模式UDP Client 一种无连接的传输协议,提供面向事务的简单不可靠信息传送服务,没有连接的建立和断开,只需要配置目的IP 和目的端口即可将数据发向对方。

通常用于对丢包率没有要求,数据包小且发送频率较快,并且数据要传向指定的IP 的数据传输场景。

UDP Client 模式下,设备只会与配置的(目标IP 和目标端口)远端UDP 设备通讯。

在本模式下,目标地址设置为255.255.255.255,发送数据将在全网段广播,但收发设备需要保证端口一致,同时设备也可以接收广播数据。

C#网络编程(Socket监听和连接)

C#网络编程(Socket监听和连接)

C#⽹络编程(Socket监听和连接)C#⽹络编程(基本概念和操作) - Part.1引⾔C#⽹络编程系列⽂章计划简单地讲述⽹络编程⽅⾯的基础知识,由于本⼈在这⽅⾯功⼒有限,所以只能提供⼀些初步的⼊门知识,希望能对刚开始学习的朋友提供⼀些帮助。

如果想要更加深⼊的内容,可以参考相关书籍。

本⽂是该系列第⼀篇,主要讲述了基于套接字(Socket)进⾏⽹络编程的基本概念,其中包括TCP协议、套接字、聊天程序的三种开发模式,以及两个基本操作:侦听端⼝、连接远程服务端;第⼆篇讲述了⼀个简单的范例:从客户端传输字符串到服务端,服务端接收并打印字符串,将字符串改为⼤写,然后再将字符串回发到客户端,客户端最后打印传回的字符串;第三篇是第⼆篇的⼀个强化,讲述了第⼆篇中没有解决的⼀个问题,并使⽤了异步传输的⽅式来完成和第⼆篇同样的功能;第四篇则演⽰了如何在客户端与服务端之间收发⽂件;第五篇实现了⼀个能够在线聊天并进⾏⽂件传输的聊天程序,实际上是对前⾯知识的⼀个综合应⽤。

与本⽂相关的还有⼀篇⽂章是:,但这个聊天程序不及本系列中的聊天程序功能强⼤,实现⽅式也不相同。

⽹络编程基本概念1.⾯向连接的传输协议:TCP对于TCP协议我不想说太多东西,这属于⼤学课程,⼜涉及计算机科学,⽽我不是“学院派”,对于这部分内容,我觉得作为开发⼈员,只需要掌握与程序相关的概念就可以了,不需要做太艰深的研究。

我们⾸先知道TCP是⾯向连接的,它的意思是说两个远程主机(或者叫进程,因为实际上远程通信是进程之间的通信,⽽进程则是运⾏中的程序),必须⾸先进⾏⼀个握⼿过程,确认连接成功,之后才能传输实际的数据。

⽐如说进程A想将字符串“It's a fine day today”发给进程B,它⾸先要建⽴连接。

在这⼀过程中,它⾸先需要知道进程B的位置(主机地址和端⼝号)。

随后发送⼀个不包含实际数据的请求报⽂,我们可以将这个报⽂称之为“hello”。

详解ABB机器人SOCKET通讯

详解ABB机器人SOCKET通讯

详解ABB机器⼈SOCKET通讯⼀、Socket通信简介Android与服务器的通信⽅式主要有两种,⼀是Http通信,⼀是Socket通信。

两者的最⼤差异在于,http连接使⽤的是“请求—响应⽅式”,即在请求时建⽴连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。

⽽Socket通信则是在双⽅建⽴起连接后就可以直接进⾏数据的传输,在连接时可实现信息的主动推送,⽽不需要每次由客户端想服务器发送请求。

那么,什么是socket?Socket⼜称套接字,在程序内部提供了与外界通信的端⼝,即端⼝通信。

通过建⽴socket连接,可为通信双⽅的数据传输传提供通道。

socket的主要特点有数据丢失率低,使⽤简单且易于移植。

1 什么是Socket Socket是⼀种抽象层,应⽤程序通过它来发送和接收数据,使⽤Socket可以将应⽤程序添加到⽹络中,与处于同⼀⽹络中的其他应⽤程序进⾏通信。

简单来说,Socket提供了程序内部与外界通信的端⼝并为通信双⽅的提供了数据传输通道。

2 Socket的分类根据不同的的底层协议,Socket的实现是多样化的。

本指南中只介绍TCP/IP协议族的内容,在这个协议族当中主要的Socket类型为流套接字(streamsocket)和数据报套接字(datagramsocket)。

流套接字将TCP作为其端对端协议,提供了⼀个可信赖的字节流服务。

数据报套接字使⽤UDP协议,提供数据打包发送服务。

下⾯,我们来认识⼀下这两种Socket类型的基本实现模型。

⼆、Socket 基本通信模型三、Socket基本实现原理3.1基于TCP协议的Socket服务器端⾸先声明⼀个ServerSocket对象并且指定端⼝号,然后调⽤Serversocket的accept()⽅法接收客户端的数据。

accept()⽅法在没有数据进⾏接收的处于堵塞状态。

(Socketsocket=serversocket.accept()),⼀旦接收到数据,通过inputstream读取接收的数据。

Socket通信协议详解

Socket通信协议详解

Socket通信协议详解要写⽹络程序就必须⽤Socket,这是程序员都知道的。

⽽且,⾯试的时候,我们也会问对⽅会不会Socket编程?⼀般来说,很多⼈都会说,Socket编程基本就是listen,accept以及send,write等⼏个基本的操作。

是的,就跟常见的⽂件操作⼀样,只要写过就⼀定知道。

对于⽹络编程,我们也⾔必称TCP/IP,似乎其它⽹络协议已经不存在了。

对于TCP/IP,我们还知道TCP和UDP,前者可以保证数据的正确和可靠性,后者则允许数据丢失。

最后,我们还知道,在建⽴连接前,必须知道对⽅的IP地址和端⼝号。

除此,普通的程序员就不会知道太多了,很多时候这些知识已经够⽤了。

最多,写服务程序的时候,会使⽤多线程来处理并发访问。

我们还知道如下⼏个事实:1。

⼀个指定的端⼝号不能被多个程序共⽤。

⽐如,如果IIS占⽤了80端⼝,那么Apache就不能也⽤80端⼝了。

2。

很多防⽕墙只允许特定⽬标端⼝的数据包通过。

3。

服务程序在listen某个端⼝并accept某个连接请求后,会⽣成⼀个新的socket来对该请求进⾏处理。

于是,⼀个困惑了我很久的问题就产⽣了。

如果⼀个socket创建后并与80端⼝绑定后,是否就意味着该socket占⽤了80端⼝呢?如果是这样的,那么当其accept⼀个请求后,⽣成的新的socket到底使⽤的是什么端⼝呢(我⼀直以为系统会默认给其分配⼀个空闲的端⼝号)?如果是⼀个空闲的端⼝,那⼀定不是80端⼝了,于是以后的TCP数据包的⽬标端⼝就不是80了--防⽕墙⼀定会阻⽌其通过的!实际上,我们可以看到,防⽕墙并没有阻⽌这样的连接,⽽且这是最常见的连接请求和处理⽅式。

我的不解就是,为什么防⽕墙没有阻⽌这样的连接?它是如何判定那条连接是因为connet80端⼝⽽⽣成的?是不是TCP数据包⾥有什么特别的标志?或者防⽕墙记住了什么东西?后来,我⼜仔细研读了TCP/IP的协议栈的原理,对很多概念有了更深刻的认识。

SOCKET函数详解(My整理)

SOCKET函数详解(My整理)

Socket 函数说明1.1 库函数综述1.1.1 套接字函数表 1.1 Windows Sockets 1.1 版本Berkeley Sockets函数函数名说明accept()确认外来连接,并将它与一个立即建立的数据套接字联系起来。

原始套接字返回到监听状态bind() 给未命名套接字赋一个本地名closesocket()从进程对象参考表中删去一个套接字,只有当SO_LINGER设置时才阻塞connect()在指定套接字上初始化连接getpeername() 获取与指定套接字连接的对等方的名字getsockname() 获取指定套接字的当前名字getsockopt() 获取与指定套接字相关的选项htonl() 将一个32位数从主机字节顺序转换为网络字节顺序htons() 将一个16 位数从主机字节顺序转换为网络字节顺序inet_addr() 将一个用网际标准点分表示法表示的字符串地址转换成网际地址值inet_ntoa() 将一个网际地址值转换成一个用点分十进制表示法表示的字符串地址ioctlsocket() 为套接字提供控制listen() 在指定套接字上监听外来连接ntohl() 将一个32位数从网络字节顺序转换为主机字节顺序ntohs() 将一个16 位数从网络字节顺序转换为主机字节顺序recv()从一个连接的套接字上接收数据recvfrom()从一个连接或未连接的套接字上接收数据select()执行多路同步I/Osend()给一个连接套接字发送数据sendto()给一个连接或未连接套接字发送数据setsockopt() 设置与指定套接字相关的选项shutdown() 关闭全双工连接的一部分socket() 建立一个通讯用的末端点,返回一个套接字注:标红函数作用在阻塞套接字上可以阻塞。

这些函数根据功能的不同可以分为如下几类:(1) 套接字函数。

此类函数包括socket(),bind(),getpeername(),getsockname()和closesocket(),它们主要完成创建,关闭套接字功能,以及对套接字命名与名字获取。

鸿蒙socket的用法

鸿蒙socket的用法

鸿蒙socket的用法一、Socket的基本概念Socket是构成TCP/IP网络服务的组件,它提供了应用程序之间的通信端口,即所谓的Socket端口。

在鸿蒙网络编程中,Socket编程模型是实现网络通信的基础。

在使用Socket进行网络编程时,需要先创建一个Socket对象,该对象代表一个网络连接。

在鸿蒙中,可以使用以下方法创建Socket 对象:1. Socket()构造函数:创建一个普通的Socket对象,需要指定协议族和协议类型。

2. Socket(int domain, int type, int protocol):使用指定的协议族、类型和协议创建一个Socket对象。

创建完Socket对象后,需要调用其connect()方法来建立与远程主机的连接。

三、数据的发送和接收在鸿蒙Socket编程中,数据的发送和接收是通过使用输入/输出流来实现的。

可以使用Socket对象的InputStream和OutputStream方法来读取和写入数据。

1. 数据的发送:使用Socket对象的OutputStream方法将数据写入到网络连接中。

2. 数据的接收:使用Socket对象的InputStream方法从网络连接中读取数据。

四、连接的关闭在完成网络通信后,需要关闭Socket连接。

可以使用Socket对象的close()方法来关闭连接。

五、服务器端编程在鸿蒙Socket编程中,服务器端程序通常使用多线程来处理多个客户端的连接请求。

可以使用ServerSocket类来创建一个监听端口,并等待客户端的连接请求。

当有客户端连接时,ServerSocket会返回一个Socket对象,该对象代表与该客户端的连接。

可以使用该对象来与客户端进行通信。

六、客户端编程客户端程序通常用于发起网络请求,并接收服务器响应。

在鸿蒙Socket编程中,可以使用Socket类来创建一个客户端连接,并发送请求数据。

当服务器响应时,可以使用Socket对象的InputStream 方法来读取响应数据。

qt qtcpsocket 用法

qt qtcpsocket 用法

qt qtcpsocket 用法QT是一种跨平台开发工具,支持多种编程语言,例如C++、Java 等,QT拥有强制性的C++ API,允许开发者完成各种应用程序的UI设计、数据库操作、网络编程等功能。

QT中的QTcpSocket是一个可以用于网络通信的类,它提供了一个TCP套接字便捷的封装,允许开发者以同步或异步方式将数据从客户端发送到服务器。

下面,我们来一步步阐述QT的QTcpSocket的用法。

第一步:使用QTcpSocket建立连接我们可以使用下面的代码来使用QTcpSocket建立连接:```cppQTcpSocket socket;socket.connectToHost(hostName, portNumber);if(socket.waitForConnected())qDebug() << "Connected to host " << hostName << " on port " << portNumber;elseqDebug() << "Connection failed.";```其中,hostName和portNumber分别是我们需要连接的主机名和端口号。

可以通过waitForConnected函数来等待连接成功。

连接成功后,调试器将输出Connected to host xxx on port yyy。

第二步:发送数据成功建立连接后,我们可以使用QTcpSocket发送数据,以发送字符串为例:```cppQString message = "Hello, world!";socket.write(message.toUtf8());```这里,我们首先将要发送的字符串转换为UTF-8编码格式,并调用QTcpSocket的write函数发送数据。

常用socket函数详解

常用socket函数详解

常⽤socket函数详解常⽤socket函数详解关于socket函数,每个的意义和基本功能都知道,但每次使⽤都会去百度,参数到底是什么,返回值代表什么意义,就是说⽤的少,也记得不够精确。

每次都查半天,经常烦恼于此。

索性都弄得清楚、通透,并记录下来,⼀来便于⾃⼰记忆,再者以防⽇后查阅、回顾。

主要介绍:socket、bind、listen、connect、accept、send、sendto、recv、recvfrom、close、shutdown⽹络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,⽽Unix/Linux基本哲学之⼀就是“⼀切皆⽂件”,都可以⽤“打开open –> 读写write/read –> 关闭close”模式来操作。

我的理解就是Socket就是该模式的⼀个实现,socket即是⼀种特殊的⽂件。

其在linux和windows环境下的头⽂件主要是:#include<sys/socket.h>和#include<WinSock2.h>下⾯较为详细的介绍各个函数的使⽤⽅法,及返回值判断和处理。

另外,若想对函数调⽤后内核的详细动作过程,可参考UNIX⽹络编程第⼀卷或TCPIP详解第⼆卷。

1.socketint socket(int domain,int type, int protocol)_________________________返回值:⾮负描述符 – 成功,-1 - 出错其中:family指明了协议族/域,通常AF_INET、AF_INET6、AF_LOCAL等;type是套接⼝类型,主要SOCK_STREAM、SOCK_DGRAM、SOCK_RAW;protocol⼀般取为0。

成功时,返回⼀个⼩的⾮负整数值,与⽂件描述符类似。

对于windows环境下,在调⽤该函数之前需⾸先调⽤WSAStartup函数完成对Winsock服务的初始化,如#include<WinSock2.h>WSADATA wdata;if ( WSAStartup(MAKEWORD(2,2), &wdata) !=0 ){return INVALID_SOCKET;}后⾯即可调⽤socket函数,参数意义与linux环境⼀致。

NewStream与Socket详解

NewStream与Socket详解

Socket是一种特殊的I/O。

常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。

流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

Visual C#中操作Socket:虽然Visual C#可以使用NetworkStream来传送、接收数据,但NetworkStream在使用中有很大的局限性,利用NetworkStream只能传送和接收字符类型的数据,如果要传送的是一些复杂的数据如:二进制数据等,它就显得能力有限了。

但使用NetworkStream在处理自身可操作数据时,的确要比Socket方便许多。

Socket(套接字)几乎可以处理任何在网络中需要传输的数据类型。

表01和表02是Socket类中的常用属性和方法及其简要说明。

(比MSDN上翻译的容易明白多了,嘿嘿)属性说明AddressFam ily 获取Socket的地址族。

Available 获取已经从网络接收且可供读取的数据量。

Blocking 获取或设置一个值,该值指示Socket是否处于阻塞模式。

Connected 获取一个值,该值指示Socket是否已连接到远程资源。

Handle 获取Socket的操作系统句柄。

LocalEndPoint 获取本地终结点。

ProtocolType 获取Socket的协议类型。

Rem oteEndPoint 获取远程终结点。

SocketType 获取Socket的类型。

表01:Socket类的常用属性及其说明方法说明Accept 创建新的Socket以处理传入的连接请求。

BeginAccept 开始一个异步请求,以创建新的Socket来接受传入的连接请求。

BeginConnect 开始对网络设备连接的异步请求。

BeginReceive 开始从连接的Socket中异步接收数据。

socket tcp keepalive机制

socket tcp keepalive机制

标题:探讨Socket TCP KeepAlive机制的作用和实现方式1.概述在计算机网络编程中,Socket TCP KeepAlive机制是一个非常重要的概念。

它可以确保网络连接的稳定性和可靠性,同时可以避免因网络异常而导致的连接中断和数据丢失问题。

2.TCP协议的连接保活机制TCP协议是一种面向连接的协议,它通过三次握手建立连接,并提供可靠的数据传输服务。

在TCP连接建立后,如果在一段时间内没有数据传输,TCP连接就会被视为空闲连接,这时候就需要通过心跳包来确认对端的存活状态。

3.Socket TCP KeepAlive机制的作用Socket TCP KeepAlive机制可以确保连接的存活状态。

当一端意外关闭或者网络异常导致连接中断时,KeepAlive机制可以及时检测到连接的异常并进行处理,从而保证数据传输的可靠性和稳定性。

4.KeepAlive机制的实现方式在TCP连接建立后,可以通过设置SO_KEEPALIVE选项来启用KeepAlive机制。

通过设置KeepAlive的相关参数,如KeepAlive时间间隔、KeepAlive尝试次数等,可以调整KeepAlive机制的工作方式,以适应不同的网络环境和需求。

5.如何优化Socket TCP KeepAlive机制为了提高KeepAlive机制的效率和性能,可以根据实际情况进行一些优化。

可以根据网络延迟和稳定性调整KeepAlive时间间隔和尝试次数,以确保及时发现连接异常;还可以结合其他技术手段,如心跳检测、断线重连等,以提高连接的稳定性和可靠性。

6.总结Socket TCP KeepAlive机制是保障网络连接稳定性和可靠性的重要手段。

通过了解其作用、实现方式和优化方法,可以更好地应用和调整KeepAlive机制,以确保网络连接的稳定和可靠。

7.参考文献- Understanding TCP/IP Network Performance and Security, Mark A. Miller- TCP/IP Illustrated, Volume 1: The Protocols, W. Richard Stevens- The Linux Programming Interface, Michael Kerrisk8. KeepAlive 机制与网络性能优化除了保证连接的稳定性和可靠性外,KeepAlive机制还可以与网络性能优化相结合,进一步提升应用程序的用户体验和系统的效率。

Python的socket模块详解

Python的socket模块详解

Python的socket模块详解Python的socket模块详解最近在学习Python看了⼀篇⽂章写得不错,是在脚本之家⾥的,原⽂如下,很有帮助:⼀、⽹络知识的⼀些介绍socket 是⽹络连接端点。

例如当你的Web浏览器请求上的主页时,你的Web浏览器创建⼀个socket并命令它去连接的Web服务器主机,Web服务器也对来⾃的请求在⼀个socket上进⾏监听。

两端使⽤各⾃的socket来发送和接收信息。

在使⽤的时候,每个socket都被绑定到⼀个特定的IP地址和端⼝。

IP地址是⼀个由4个数组成的序列,这4个数均是范围 0~255中的值(例如,220,176,36,76);端⼝数值的取值范围是0~65535。

端⼝数⼩于1024的都是为众所周知的⽹络服务所保留的(例如Web服务使⽤的80端⼝);最⼤的保留数被存储在socket模块的IPPORT_RESERVED变量中。

你也可以为你的程序使⽤另外的端⼝数值。

不是所有的IP地址都对世界的其它地⽅可见。

实际上,⼀些是专门为那些⾮公共的地址所保留的(⽐如形如192.168.y.z或10.x.y.z)。

地址127.0.0.1是本机地址;它始终指向当前的计算机。

程序可以使⽤这个地址来连接运⾏在同⼀计算机上的其它程序。

IP地址不好记,你可以花点钱为特定的IP地址注册⼀个主机名或域名(⽐如使⽤代替222.76.216.16)。

域名服务器(DNS)处理名字到IP 地址的映射。

每个计算机都可以有⼀个主机名,即使它没有在官⽅注册。

多少信息通过⼀个⽹络被传送基于许多因素,其中之⼀就是使⽤的协议。

许多的协议是基于简单的、低级协议以形成⼀个协议栈。

例如HTTP协议,它是⽤在Web浏览器与Web服务器之间通信的协议,它是基于TCP协议,⽽TCP协议⼜基于IP协议。

当在你⾃⼰的两个程序间传送信息的时候,你通常选择TCP或UDP协议。

TCP协议在两端间建⽴⼀个持续的连接,并且你所发送的信息有保证的按顺序到达它们的⽬的地。

(十一)socket、connect、bind函数详解

(十一)socket、connect、bind函数详解

(⼗⼀)socket、connect、bind函数详解⼀、socket函数1、头⽂件:#include <sys/types.h> /* See NOTES */#include <sys/socket.h>2、函数原型:int socket(int domain, int type, int protocol);socket函数类似于open,⽤来打开⼀个⽹络连接,如果成功则返回⼀个⽹络⽂件描述符(int类型),之后我们操作这个⽹络连接都通过这个⽹络⽂件描述符。

dimain:域,⽹络域,⽹络地址范围(IPV4或IPV6等),也就是协议簇type:指定套接字类型:SOCK_STREAM(TCP⽹络)、SOCK_DGRAM(UDP)、SOCK_SEQPACKETprotocol:指定协议,如果指定0,表⽰使⽤默认的协议3、函数形参:3.1、domain:(域)AF_INET ipAF_INET6 ipv6AF_PACKET packet 低级数据包接⼝PF_PACKET 不懂,待了解PF_INET 待了解(AF开头的表⽰地址族,PF开头的表⽰协议族,协议族包含多个地址族,但是当前这种还从未实现,⽽在<sys/socket.h>中PF的值总是与AF的值相等的)3.2、type:(套接字类型):SOCK_RAW 原始套接字 ——>使⽤原始套接字时候调⽤,原始套接字也就是链路层协议SOCK_STREAM 字节流套接字 ——>提供顺序,可靠,双向,基于连接的字节流。

可以⽀持带外数据传输机制。

例如:TCP协议、FTP协议SOCK_DGRAM 数据报套接字 ——>⽀持数据报(⽆连接,不可靠的固定最⼤长度的消息)例如:UDP协议SOCK_SEQPACKET 有序分组套接字 ——>为固定最⼤长度的数据报提供有序,可靠,双向连接的数据传输路径; 消费者需要利⽤每个输⼊系统调⽤读取整个分组3.3、protocol(协议):IPPROTO_IP IP传输协议IPPROTO_TCP TCP传输协议IPPROTO_UDP UDP协议IPPROTO_SCTP SCTP传输协议IPPROTO_ICMP ICMP协议IPPROTO_IGMP IGMP协议⼀般情况下IPPROTO_TCP、IPPROTO_UDP、IPPROTO_ICMP协议⽤的最多,UDP协议protocol就取IPPROTO_UDP,TCP协议protocol就取IPPROTO_TCP;⼀般情况下,我们让protocol等于0就可以,系统会给它默认的协议。

什么是套接字(Socket)

什么是套接字(Socket)

什么是套接字(Socket)应⽤层通过传输层进⾏数据通信时,TCP和UDP会遇到同时为多个应⽤程序进程提供并发服务的问题。

多个TCP连接或多个应⽤程序进程可能需要通过同⼀个TCP协议端⼝传输数据。

为了区别不同的应⽤程序进程和连接,许多计算机操作系统为应⽤程序与TCP/IP协议交互提供了称为套接字 (Socket)的接⼝,区分不同应⽤程序进程间的⽹络通信和连接。

⽣成套接字,主要有3个参数:通信的⽬的IP地址、使⽤的传输层协议(TCP或UDP)和使⽤的端⼝号。

Socket原意是“插座”。

通过将这3个参数结合起来,与⼀个“插座”Socket绑定,应⽤层就可以和传输层通过套接字接⼝,区分来⾃不同应⽤程序进程或⽹络连接的通信,实现数据传输的并发服务。

Socket可以看成在两个程序进⾏通讯连接中的⼀个端点,⼀个程序将⼀段信息写⼊Socket中,该Socket将这段信息发送给另外⼀个Socket 中,使这段信息能传送到其他程序中。

如图1:Host A上的程序A将⼀段信息写⼊Socket中,Socket的内容被Host A的⽹络管理软件访问,并将这段信息通过Host A的⽹络接⼝卡发送到Host B,Host B的⽹络接⼝卡接收到这段信息后,传送给Host B的⽹络管理软件,⽹络管理软件将这段信息保存在Host B的Socket中,然后程序B才能在Socket中阅读这段信息。

要通过互联⽹进⾏通信,⾄少需要⼀对套接字,⼀个运⾏于客户机端,称之为ClientSocket,另⼀个运⾏于服务器端,称之为serverSocket。

根据连接启动的⽅式以及本地套接字要连接的⽬标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

服务器监听:是服务器端套接字并不定位具体的客户端套接字,⽽是处于等待连接的状态,实时监控⽹络状态。

客户端请求:是指由客户端的套接字提出连接请求,要连接的⽬标是服务器端的套接字。

为此,客户端的套接字必须⾸先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端⼝号,然后就向服务器端套接字提出连接请求。

c# socket 、TCPClient、TCPListener 用法详解

c# socket 、TCPClient、TCPListener 用法详解

c# socket 、TcpClient、TCPListener 用法详解Visual C#.Net网络程序开发-Socket篇 Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间和.Sockets包含丰富的类可以开发多种网络应用程序。

.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Internet 不断扩展的需要。

抛开ISO/OSI模型的7层构架,单从TCP/IP模型上的逻辑层面上看,.Net类可以视为包含3个层次:请求/响应层、应用协议层、传输层。

WebReqeust和WebResponse 代表了请求/响应层,支持Http、Tcp和Udp的类组成了应用协议层,而Socket类处于传输层。

传输层位于这个结构的最底层,当其上面的应用协议层和请求/响应层不能满足应用程序的特殊需要时,就需要使用这一层进行Socket 套接字编程。

而在.Net中,.Sockets 命名空间为需要严密控制网络访问的开发人员提供了Windows Sockets (Winsock) 接口的托管实现。

命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上,如TcpClient、TCPListener 和UDPClient 类封装有关创建到Internet 的TCP 和UDP 连接的详细信息;NetworkStream类则提供用于网络访问的基础数据流等,常见的许多Internet服务都可以见到Socket的踪影,如Telnet、Http、Email、Echo等,这些服务尽管通讯协议Protocol的定义不同,但是其基础的传输都是采用的Socket。

其实,Socket可以象流Stream一样被视为一个数据通道,这个通道架设在应用程序端(客户端)和远程服务器端之间,而后,数据的读取(接收)和写入(发送)均针对这个通道来进行。

sock代理格式

sock代理格式

sock代理格式Sock代理格式详解一、概述Sock代理是一种网络代理方式,主要用于在客户端和服务器之间转发网络流量。

与传统的HTTP代理不同,Sock代理支持多种协议,并且对应用程序更加透明。

本文将详细介绍Sock代理的格式和配置方法。

二、Sock代理格式Sock代理通常由"SOCKS版本"和"命令"组成。

常见的SOCKS版本有SOCKS4和SOCKS5,其中SOCKS5支持更多的功能,如身份验证和协议协商。

命令用于指示代理如何处理网络流量,例如TCP连接('connect')或UDP通信('udp')。

例如,一个典型的SOCKS5代理配置可能如下所示:SOCKS5 127.0.0.1:1080其中,"SOCKS5"表示使用的代理协议版本,"127.0.0.1"是代理服务器的IP地址,"1080"是代理服务器的端口号。

三、配置方法在配置Sock代理时,需要指定代理服务器的地址和端口。

对于不同的应用程序,配置方法可能会有所不同。

以下是一些常见应用程序的配置方法:1.浏览器:大多数浏览器都支持通过Sock代理访问互联网。

可以在浏览器的设置或网络设置中指定代理服务器的地址和端口。

2.SSH:在使用SSH连接远程服务器时,可以通过命令行参数或配置文件指定代理服务器的地址和端口。

例如,在命令行中输入以下命令:ssh -D 1080 user@remote_host其中,"1080"是本地SOCKS代理的端口号,"user"是远程服务器的用户名,"remote_host"是远程服务器的地址。

在连接成功后,可以将本地端口映射到远程服务器上,以便通过本地代理访问远程服务器。

3.程序代码:在使用编程语言编写网络应用程序时,可以通过程序代码配置Sock代理。

Socket详解之阻塞非阻塞

Socket详解之阻塞非阻塞

这里不打算系统地介绍socket或者WinSock的知识。

首先介绍WinSock API函数,讲解阻塞/非阻塞的概念;然后介绍socket的使用。

APISocket接口是网络编程(通常是TCP/IP协议,也可以是其他协议)的API。

最早的Socket 接口是Berkeley接口,在Unix小小操作系统中实现。

WinSock也是一个基于Socket模型的API,在Microsoft Windows操作系统类中使用。

它在Berkeley接口函数的基础之上,还增加了基于消息驱动机制的Windows扩展函数。

只支持TCP/IP网络,增加了对更多协议的支持。

这里,讨论TCP/IP网络上的API。

Socket接口包括三类函数:第一类是WinSock API包含的Berkeley socket函数。

这类函数分两部分。

第一部分是用于网络I/O的函数,如accept、Closesocket、connect、recv、recvfrom、Select、Send、Sendto。

另一部分是不涉及网络I/O、在本地端完成的函数,如bind、getpeername、getsockname、getsocketopt、htonl、htons、inet_addr、inet_nton、ioctlsocket、listen、ntohl、ntohs、setsocketopt、shutdow、socket等第二类是检索有关域名、通信服务和协议等Internet信息的数据库函数,如gethostbyaddr、gethostbyname、gethostname、getprotolbyname、getprotolbynumber、getserverbyname、getservbyport。

第三类是Berkekley socket例程的Windows专用的扩展函数,如gethostbyname对应的WSAAsynGetHostByName(其他数据库函数除了gethostname都有异步版本),select对应的WSAAsynSelect,判断是否阻塞的函数WSAIsBlocking,得到上一次Windsock API错误信息的WSAGetLastError,等等。

网络编程socket基本API详解

网络编程socket基本API详解

⽹络编程socket基本API详解socket socket是在应⽤层和传输层之间的⼀个抽象层,它把TCP/IP层复杂的操作抽象为⼏个简单的接⼝供应⽤层调⽤已实现进程在⽹络中通信。

socket起源于UNIX,在Unix⼀切皆⽂件哲学的思想下,socket是⼀种"打开—读/写—关闭"模式的实现,服务器和客户端各⾃维护⼀个"⽂件",在建⽴连接打开后,可以向⾃⼰⽂件写⼊内容供对⽅读取或者读取对⽅内容,通讯结束时关闭⽂件。

socket 类型常见的socket有3种类型如下。

(1)流式socket(SOCK_STREAM )流式套接字提供可靠的、⾯向连接的通信流;它使⽤TCP 协议,从⽽保证了数据传输的正确性和顺序性。

(2)数据报socket(SOCK_DGRAM )数据报套接字定义了⼀种⽆连接的服,数据通过相互独⽴的报⽂进⾏传输,是⽆序的,并且不保证是可靠、⽆差错的。

它使⽤数据报协议UDP。

(3)原始socket(SOCK_RAW)原始套接字允许对底层协议如IP或ICMP进⾏直接访问,功能强⼤但使⽤较为不便,主要⽤于⼀些协议的开发。

socket创建和连接计算机数据存储有两种字节优先顺序:⾼位字节优先和低位字节优先。

Internet上数据以⾼位字节优先顺序在⽹络上传输,所以对于在内部是以低位字节优先⽅式存储数据的机器,在Internet上传输数据时就需要进⾏转换。

⼏个字节顺序转换函数:htons()--"Host to Network Short" ; htonl()--"Host to Network Long"ntohs()--"Network to Host Short" ; ntohl()--"Network to Host Long"在这⾥, h表⽰"host" ,n表⽰"network",s 表⽰"short",l表⽰ "long"。

socket和ssl简介

socket和ssl简介

Socket流程步骤模型范讲
首先通讯双方各有一台电话机,在上述模型中就是Socket; (1)通讯一方拔打电话,试图建立连接,在上述模型中就是客户 端建立Java Socket对象;另一方随时监听有没有呼叫,当有呼 叫到来(考虑有必要接ket对象,然后用其accept()方法监听 客户端的连接请求,当有连接请求时accept方法返回客户端的 Socket,于是双方就建立起连接; (2)双方通话,过程中双方都可以说和听,在上述模型中,每个 Socket可以利用输入输出流进行读和写两种操作;在电话中一 方听到的是对方说出的,反之亦然;上述模型中,一方读出的 也是对方写入的,而写入的则是对方要读出的 (3)挂断close()。
关于其他socket的功能方法 传递图片、 传递视频、 传递音频、 多线程并发 等功能日后有机会大家再深入研究。
Ssl初印象
1、SSL(Security Socket Layer全称是加密套接字协议层) ――Secure socket layer(SSL)协议最初由Netscape企业 发展,现已成为网络用来鉴别网站和网页浏览者身份, 以及在浏览器使用者及网页服务器之间进行加密通讯的 全球化标准。由于SSL技术已建立到所有主要的浏览器 和WEB服务器程序中,因此,仅需安装数字证书,或服 务器证书就可以激活服务器功能了。 SSL是一种基于证书的协议,任何运行SSL服务的服务器 都需要自己的证书。通常为了保证通用性,我们会向证 书颁发机构(Certificate Authority, 简称CA, 如VeriSign、 Thawte等等)申请证书,但这需要一笔费用。对于小型 组织的内部邮件服务器而言,我们完全可以使用自行建 立的证书颁发机构和证书来实现我们的需求。
4-2、双方对话,互发信息: 接收: in.readLine(); 发送:out.println(“xxx”);或者out.write(“xxx”)

socket通信协议

socket通信协议

socket通信协议简介在计算机网络通信中,socket通信协议是一种用于实现网络通信的工具。

它通过提供一种可靠的、面向连接的通信方式,使得不同的计算机之间可以进行数据传输和交流。

什么是socket通信协议?Socket通信协议,全称为套接字通信协议,是一种网络通信协议的实现方式。

它可以在不同的计算机之间建立一种双向的、可靠的数据传输通道。

Socket通信协议可以基于不同的传输层协议,如TCP、UDP等。

TCP/IP协议栈在深入了解socket通信协议之前,我们先介绍一下TCP/IP协议栈,因为socket通信协议是建立在TCP/IP协议栈之上的。

TCP/IP协议栈是一组用于实现网络通信的协议集合。

它包含了四个层次:应用层、传输层、网络层和数据链路层。

其中,socket通信协议主要涉及到传输层和网络层的协议。

在传输层,TCP协议和UDP协议是最常用的两种协议。

TCP协议提供了一种面向连接的、可靠的通信方式,确保数据的可靠传输。

UDP协议则是一种无连接的协议,适用于一些要求实时性的应用。

在网络层,IP协议是最基础的协议,负责将数据包从源主机发送到目的主机。

它通过IP地址进行路由选择和数据包转发。

socket通信的基本原理Socket通信协议基于客户端-服务器模型,其中,服务器端负责监听指定的端口,等待客户端的连接请求。

客户端则主动发起连接请求,并与服务器建立通信连接。

Socket通信协议使用IP地址和端口号来标识不同的计算机和进程。

通过使用不同的IP地址和端口号,可以实现多个进程之间的通信和数据交换。

socket通信的常见应用场景Socket通信协议在计算机网络中有着广泛的应用。

以下是一些常见的应用场景:1.网络聊天室:通过socket通信协议,用户可以在不同的计算机之间进行实时聊天和交流。

2.远程控制:通过socket通信协议,用户可以在远程控制设备,如远程操控机器人、远程管理服务器等。

3.文件传输:通过socket通信协议,用户可以实现文件的传输和共享,如FTP协议就是基于socket通信协议实现的。

从Linux源码看Socket(TCP)Client端的Connect的示例详解

从Linux源码看Socket(TCP)Client端的Connect的示例详解

从Linux源码看Socket(TCP)Client端的Connect的⽰例详解前⾔笔者⼀直觉得如果能知道从应⽤到框架再到操作系统的每⼀处代码,是⼀件Exciting的事情。

今天笔者就来从Linux源码的⾓度看下Client端的Socket在进⾏Connect的时候到底做了哪些事情。

由于篇幅原因,关于Server端的Accept源码讲解留给下次给⼤家介绍。

(基于Linux 3.10内核)⼀个最简单的Connect例⼦int clientSocket;if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {// 创建socket失败失败return -1;}......if(connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) {// connect 失败return -1;}.......⾸先我们通过socket系统调⽤创建了⼀个socket,其中指定了SOCK_STREAM,⽽且最后⼀个参数为0,也就是建⽴了⼀个通常所有的TCP Socket。

在这⾥,我们直接给出TCP Socket所对应的ops也就是操作函数。

如果你想知道上图中的结构是怎么来的,可以看下笔者以前的⽂章:值得注意的是,由于socket系统调⽤操作做了如下两个代码的判断sock_map_fd|->get_unused_fd_flags|->alloc_fd|->expand_files (ulimit)|->sock_alloc_file|->alloc_file|->get_empty_filp (/proc/sys/fs/max_files)第⼀个判断,ulmit超限:int expand_files(struct files_struct *files, int nr{......if (nr >= current->signal->rlim[RLIMIT_NOFILE].rlim_cur)return -EMFILE;......}这边的判断即是ulimit的限制!在这⾥返回-EMFILE对应的描述就是"Too many open files"第⼆个判断max_files超限struct file *get_empty_filp(void){....../** 由此可见,特权⽤户可以⽆视⽂件数最⼤⼤⼩的限制!*/if (get_nr_files() >= files_stat.max_files && !capable(CAP_SYS_ADMIN)) {/** percpu_counters are inaccurate. Do an expensive check before* we go and fail.*/if (percpu_counter_sum_positive(&nr_files) >= files_stat.max_files)goto over;}......}所以在⽂件描述符超过所有进程能打开的最⼤⽂件数量限制(/proc/sys/fs/file-max)的时候会返回-ENFILE,对应的描述就是"Too many open files in system",但是特权⽤户确可以⽆视这⼀限制,如下图所⽰:connect系统调⽤我们再来看⼀下connect系统调⽤:int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen)这个系统调⽤有三个参数,那么依据规则,它肯定在内核中的源码长下⾯这个样⼦SYSCALL_DEFINE3(connect, ......笔者全⽂搜索了下,就找到了具体的实现:socket.cSYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,int, addrlen){......err = sock->ops->connect(sock, (struct sockaddr *)&address, addrlen,sock->file->f_flags);......}前⾯图给出了在TCP下的sock->ops == inet_stream_ops,然后再陷⼊到更进⼀步的调⽤栈中,即下⾯的:SYSCALL_DEFINE3(connect|->inet_stream_ops|->inet_stream_connect|->tcp_v4_connect|->tcp_set_state(sk, TCP_SYN_SENT);设置状态为TCP_SYN_SENT|->inet_hash_connect|->tcp_connect⾸先,我们来看⼀下inet_hash_connect这个函数,⾥⾯有⼀个端⼝号的搜索过程,搜索不到可⽤端⼝号就会导致创建连接失败!内核能够建⽴⼀个连接也是跋涉了千⼭万⽔的!我们先看⼀下搜索端⼝号的逻辑,如下图所⽰:获取端⼝号范围⾸先,我们从内核中获取connect能够使⽤的端⼝号范围,在这⾥采⽤了Linux中的顺序锁(seqlock)void inet_get_local_port_range(int *low, int *high){unsigned int seq;do {// 顺序锁seq = read_seqbegin(&sysctl_local_ports.lock);*low = sysctl_local_ports.range[0];*high = sysctl_local_ports.range[1];} while (read_seqretry(&sysctl_local_ports.lock, seq));}顺序锁事实上就是结合内存屏障等机制的⼀种乐观锁,主要依靠⼀个序列计数器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Socket网络连接详解
一. 网络OSI模式(7层)
网络模型:OSI(开放系统互联Open System Interconnnection)TCP/IP参考模型
网络通讯要素:
1.IP地址(唯一标识网络设备)
网络中设备的标示
不易记忆,可以用主机名
本地回环地址:127.0.0.1 主机名:localhost
2.端口号(定位程序标示进程的逻辑地址,不同进程的标示)
有效端口:0~65535,其中0~1024由系统使用或者保留端口,开发中不要使用1024以下的端口
3.传输协议(用什么样的模式交互)
通讯的规则,常见协议:TCP、UDP
URL(统一资源定位) http://ip:80/文件路径
二. OSI七层以及作用
应用层七层
七层代表的是:物理层->数据链路层->网络层->传输层->会话层->表示层->应用层
(记法:
物理层是最基层的层次(物理层),
有了物理层我们想要发送数据(数据链路层),
要传输数据就要需要介质也就是网络(网络层),
有了介质后我们就可以传输数据给对方(传输层),
传输完成后就可以发给另一个用户对话(会话层),
有了对话后就需要显示出来(显示层),
显示出来后就可以进行使用了(应用层)
)
七层之间的关系
网络层各节点都有相同的层次
不同节点相同层次具有相同的功能
同一节点相邻层间通过接口通信
每一层可以使用下层提供的服务,并向上层提供服务
不同结点的同等层间通过协议来实现对等层间的通信
三. 七层内容和作用
物理层:主要定义物理设备标准,如网线的接口类型、各种传输介质的传输速率等。

主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是常说的数模与模数转换)。

这一层的数据叫做比特(bit),主要设备:集线器
数据链路层:主要将从物理层接收的数据进行MAC地址的封装与解封装。

常把这一层的数据叫做帧,主要设备:网卡,交换机
网络层:选择合适的网间路由和交换结点,确保数据及时传送,将从下层接收到的数据进行IP地址的封装与解封装。

常把这一层数据叫做数据包,主要设备:路由器。

传输层:定义了一些传输数据的协议和端口,如TCP、UDP协议,主要将从下层接收的数据进行分段和传输,到达目的地址后再进行重组,以往把这一层数据叫做段。

会话层:通过传输层建立数据传输通路。

在系统之间发起会话或者接受会话请求(设备之间需要互相认识)
表示层:主要是进行对接收的数据进行解释、压缩与解压缩等,即把计算机能够识别的东西转化成人能够识别的东西(如图片、声音等)
应用层:主要是一些终端的应用,比如说FTP(各种文件下载)、浏览器、QQ 等,可以将其理解为在电脑屏幕上可以看到的东西,也就是终端应用。

四. TCP/IP参考模型(4层)
OSI和TCP/IP的不同
每层代表
五.TCP UDP的区别
首先,我们先了解一下各自分别代表的是什么协议
TCP:传输控制协议
UDP:用户数据报协议
两者的区别在于:
1.连接方式
TCP:需要建立连接,形成传输数据的通道
UDP:不需要建立连接,将数据源和目的封装成数据包中
2.数据传输的大小
TCP:数据大小不收限制,在连接中进行大数据传输
UDP:每个数据报的大小限制在64K之内
3.安全性
TCP:通过三次握手完成连接,因此是可靠协议,安全送达
UDP:因为无需连接,因此是不可靠协议
4.效率性
TCP:必须需要建立连接,所以效率稍微会低些
UDP:不需要建立连接,速度快
六.Scoket的解释(网络进程间如何进行通讯)
Socket就是为网络服务提供的一种机制
通信的两端都是Socket
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO传输
Socket抽象层是位于应用层和传输层之间的一层
可以只传送数据本身而不用进行XML封装,大大降低数据传输的开销(JSON)
Socket允许使用长连接,允许应用程序运行在异步模式(提高效率),只有在需要的时候才接收数据
常用的两种Socket类型
流式Socket(SOCK_STREAM):流式是一种面向连接的Socket,针对于面向连接的TCP服务应用
数据报式Socket(SOCK_DGRAM):数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用
七.如何唯一标识一个进程
本地:通过进程间PID来唯一标识一个进程
网络:TCP/IP协议中的网络层的“IP地址”来唯一标识网络中的主机。

传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。

利用三元组标识(ip地址,协议,端口)就可以标识网络的进程与其他进程的交互
八.socket的基本操作(套接字)
socket的基本操作
socket函数
九.socket中TCP- 三次握手建立连接
三次握手建立连接
第一次握手:
建立连接。

客户端发送连接请求报文段,将SYN位置为1,Sequence Number 为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
第二次握手:
服务器收到SYN报文段。

服务器收到客户端的SYN报文段,需要对这个SYN 报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
第三次握手:
客户端收到服务器的SYN+ACK报文段。

然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

十.socket中TCP- 四次握手释放连接详解
四次握手释放连接
图示过程如下:
1.某个应用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;
2.另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。

它的接收也作为文件结束符传递给应用进程,
因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据;
3.一段时间之后,接收到文件结束符的应用进程调用close关闭它的socket。

这导致它的TCP也发送一个FIN N;
4.接收到这个FIN的源发送端TCP对它进行确认。

十一.在iOS中流式Socket连接的方法
在iOS中以NSStream(流)来发送和接收数据,可以设置流的代理,对流状态的变化做出响应
连接建立
接收到数据
连接关闭
NSStream:数据流的父类,用于定义抽象特性,例如:打开、关闭代理,NSStream继承自CFStream(Core Foundation)
NSOutputStream:NSSTream的子类- 输出流:用来写数据
NSInputStream:NSStream的子类-输入流:用来读数据
A输出------输入->B A向B输入数,对A是输出,但对B是输入
十二.Socket连接与HTTP连接的不同
通常情况下Socket连接就是TCP连接
不同点:
1.连接长度
Socket:长连接,连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开
HTTP:短连接,连接使用的是“请求—响应”的方式
2.连接响应
Socket:实际情况中,客户端到服务器之间的通信防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态
HTTP:在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据(被动)。

相关文档
最新文档