几个经典的TCP通信函数
前言
在TCP通信中要使用到几个非常经典的函数( 点这里参考一个关于它们作用的形象比方 ),本文将对这几个函数进行一个简短的使用说明。
socket函数
函数作用:创建一个网际字节流套接字
包含头文件:sys/socket.h ( 后面几个函数也一样 )
函数原型:int socket ( int family, int type, int protocol )
参数说明:
family:指明协议族( 如AF_INET,AF_INET6,AF_LOCAL等 )
type:指明套接字类型( 如SOCK_STREAM,SOCK_DGRAM等 )
protocol:直接指明某种 family 和 type 的组合而无视前2个参数,如下图( 如果该参数为0则启用family和type的组合类型 ):

返回值说明:成功返回描述符,失败返回-1。
connect函数
函数作用:与指定主机进行连接
函数原型:int connect ( int sockfd, const struct sockaddr *servaddr, socklen_t addrlen );
参数说明:
sockfd:要建立连接的套接字(连接是以套接字为单位建立而不是主机 )
servaddr:要连接主机的套接字地址结构
addrlen:servaddr的大小
返回值说明:若成功返回0,失败返回-1。
特别说明:
1. 该函数将激发三次握手
2. 如果TCP客户没有收到SYN分节响应,则返回ETIMEOUT错误。
3. 如果对客户的SYN的响应是RST,则表示SYN分节正确送到但没有服务,或者对方想取消这次连接,或者TCP接收到一个根本不存在的连接上的分节。这种情况将返回ECONNREFUSED错误。
4. 如果客户发出的SYN分节在路由传递过程中出现了问题( 路由器返回主机不可达 ),则将返回EHOSTUNREACH或者ENETUNREACH错误。
bind函数
函数作用:把一个本地地址赋予一个套接字
函数原型:int bind ( int sockfd, const struct sockaddr * myaddr, socklen_t addrlen )
参数说明:
sockfd:要绑定的套接字
myaddr:要绑定的套接字地址结构
addrlen:上述结构的大小
返回值说明:若成功返回0,失败返回-1。
特别说明:一般情况,服务器绑定一个INADDR_ANY( 任意型 )的地址就可以了,客户端不用绑定。
listen函数
函数作用:把一个未连接的套接字转换成被动套接字
函数原型:int listen ( int sockfd, int backlog )
参数说明:
sockfd:要转换的套接字
backlog:未完成队列+已完成队列的长度和
返回值说明:若成功返回0,失败返回-1。
accept函数
函数作用:从已完成队列返回下一个已完成连接。
函数原型:int accept ( int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen )
参数说明:
sockfd:监听套接字描述符
cliaddr:请求连接端的套接字地址结构
addrlen:cliaddr的大小
返回值说明:若成功返回非负描述符,失败返回-1。
特别说明:
1.一般情况下,一个服务器仅仅只有一个监听套接字,但是对每个服务请求都会创建一个已连接套接字。
2.已连接套接字在每次循环后都会关闭,但监听套接字在服务器有效期间都会开放。
几个经典的TCP通信函数的更多相关文章
- 第七篇:几个经典的TCP通信函数
前言 在TCP通信中要使用到几个非常经典的函数,本文将对这几个函数进行一个简短的使用说明. socket()函数 函数作用:创建一个网际字节流套接字 包含头文件:sys/socket.h ( 后面几个 ...
- TCP通信
//网络套接字编程实例,服务器端,TCP通信. #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib") #inc ...
- 理论经典:TCP协议的3次握手与4次挥手过程详解
1.前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着两个使用TCP的应用(通常是一个客户和一 ...
- Linux网络IO函数以及TCP连接函数包装
标准I/O VS 网络IO 标准I/O又称为标准I/O流,从某种意义上讲是全双工的,因为程序能够在同一个流上执行输入和输出. Unix/Linux对网络的抽象是一种称为套接字的文件类型.和任何Unix ...
- Python TCP通信网络编程
最近在看廖雪峰老师的基础教程(http://www.liaoxuefeng.com/),今天实现了一下简单Python的Socket的网络编程. 1. Socket网络编程 Socket是网络编程的一 ...
- Linux TCP通信例子
TCP通信的C/S模型 ///server.c #include <sys/types.h> #include <sys/socket.h> #include <stdi ...
- 套接字、UDP通信、TCP通信、TCP/IP协议簇
一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...
- 性能测试基础 ---TCP通信过程的状态码与过程,以及出现错误码的分析(TIME_WAIT,CLOSE_WAIT)
TCP通信过程 如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手).数据传输.断开TCP连接通道(四次挥手). 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过 ...
- 上位机面试必备——TCP通信灵魂二十问【下】
上篇文章跟大家介绍了TCP通信常见的前10个面试题,没看过的小伙伴可以点击下方链接进行查看: 上位机面试必备——TCP通信灵魂二十问[上] 今天就后面的10个面试题接着做下说明:欢迎关注[dotNet ...
随机推荐
- CodeForces 618D Hamiltonian Spanning Tree
题意:要把所有的节点都访问一次,并且不能重复访问,有两种方式访问,一种是根据树上的路径 走和当前节点连接的下一个节点cost x, 或者可以不走树上边,直接跳到不与当前节点连接的节点,cost y 分 ...
- HDU1724 Ellipse
Math is important!! Many students failed in 2+2’s mathematical test, so let's AC this problem to mou ...
- 切換 java compiler 版本
有些程式在執行時會顯示需要較新的 java jre 版本, 若系統裝有兩個 java jre 可以使用下列指令切協版本, sudo update-alternatives --config java ...
- jq ajax之beforesend(XHR)
用于在向服务器发送请求前添加一些处理函数.例如:搜寻附近店铺,未搜寻出来的时候显示:正在搜寻中... 常见的一种效果,在用ajax请求时,没有返回前会出现前出现一个转动的loading小图标或者“内容 ...
- CodeForces 380.C Sereja and Brackets
题意 一串括号序列,只由(和)组成,然后是m个提问,提问l和r区间内,最大的匹配匹配括号数. 思路 第一,贪心的思想,用最正常的方式去尽量匹配,详细点说就是,先找到所有的(),然后删除这些(),再找所 ...
- hdu4183往返经过至多每个点一次/最大流
题意:从s到t,每个点有f值,只能从f值小的到大的,到T后回来,只能从f值大的到 小的,求可行否. 往返,其实就是俩条路过去(每个点最多一次),所以想到流量为2,跑最大流,看是否满2,又要每个点最多一 ...
- 洛谷——P2404 自然数的拆分问题
题目背景 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. 输入输出格式 输入格式: 输入:待拆分的自然数n ...
- mybatis 源码学习(二)sqlsession
mybatis 中的sqlsession是一个非常重要的类.上篇我们分析了sessionfactory初始化配置文件,我们继续分析sessionfactory拿到会话进行的操作. 看这里.getMap ...
- Java 对象的序列化、反序列化
对象的序列化(Serialize):将内存中的Java对象转换为与平台无关的二进制流(字节序列),然后存储在磁盘文件中,或通过网络传输给另一个网络节点. 对象的反序列化(Deserialize):获取 ...
- 小W计树
排列组合思想. 先跑一遍最短路, 再从1节点开始搜索, 假如搜到一个点的路径长度等于最短路, 则记录到达该点的路径数 + 1. 最后遍历一遍, ans *= rec[i] 输出答案即可. 关键在于想到 ...