前言

  在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通信函数的更多相关文章

  1. 第七篇:几个经典的TCP通信函数

    前言 在TCP通信中要使用到几个非常经典的函数,本文将对这几个函数进行一个简短的使用说明. socket()函数 函数作用:创建一个网际字节流套接字 包含头文件:sys/socket.h ( 后面几个 ...

  2. TCP通信

    //网络套接字编程实例,服务器端,TCP通信. #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib") #inc ...

  3. 理论经典:TCP协议的3次握手与4次挥手过程详解

    1.前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着两个使用TCP的应用(通常是一个客户和一 ...

  4. Linux网络IO函数以及TCP连接函数包装

    标准I/O VS 网络IO 标准I/O又称为标准I/O流,从某种意义上讲是全双工的,因为程序能够在同一个流上执行输入和输出. Unix/Linux对网络的抽象是一种称为套接字的文件类型.和任何Unix ...

  5. Python TCP通信网络编程

    最近在看廖雪峰老师的基础教程(http://www.liaoxuefeng.com/),今天实现了一下简单Python的Socket的网络编程. 1. Socket网络编程 Socket是网络编程的一 ...

  6. Linux TCP通信例子

    TCP通信的C/S模型 ///server.c #include <sys/types.h> #include <sys/socket.h> #include <stdi ...

  7. 套接字、UDP通信、TCP通信、TCP/IP协议簇

    一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...

  8. 性能测试基础 ---TCP通信过程的状态码与过程,以及出现错误码的分析(TIME_WAIT,CLOSE_WAIT)

    TCP通信过程 如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手).数据传输.断开TCP连接通道(四次挥手). 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过 ...

  9. 上位机面试必备——TCP通信灵魂二十问【下】

    上篇文章跟大家介绍了TCP通信常见的前10个面试题,没看过的小伙伴可以点击下方链接进行查看: 上位机面试必备——TCP通信灵魂二十问[上] 今天就后面的10个面试题接着做下说明:欢迎关注[dotNet ...

随机推荐

  1. iOS-OAuth认证

    OAuth授权 OAuth授权分四步: 第一步,应用向服务提供方申请请求令牌(Request Token),服务提供方验证通过后将令牌返回.这个步骤由于涉及到应用帐号密码,在应用的服务端发起,所以这个 ...

  2. 反射+注解:excel2module

    package test.excelTest; import java.io.File; import java.io.FileInputStream; import java.lang.reflec ...

  3. element-ui select组件使用需要注意的

    当在使用select组件的时候,要注意 <el-select v-model="scope.row.state" @change="editDriftStatus& ...

  4. 定情信物(bzoj 3823)

    Description 都说程序员找不到妹子,可是无人知晓,三生石上竟然还刻着属于小 E 的一笔. 那一天,小 E 穷尽毕生的积蓄,赠与了妹子一个非同寻常的定情信物.那是一个小 小的正方体,但透过它, ...

  5. Codeforces878C. Tournament

    $n \leq 50000$个人,每个人有$K \leq 10$个属性,现对每一个前缀问:进行比赛,每次任意两人比任意属性,小的淘汰(保证同一属性不会出现两个相同的数),最终有几个人有可能获胜. 明显 ...

  6. 40深入理解C指针之---指针与单链表

    一.指针与单链表 1.定义:通过使用指针将节点(结点)链接起来成为链表 2.节点(结点): 1).数据域:主要用来存储数据,可以基本数据类型,也可以是构造数据类型: 2).指针域:主要用来当前节点(结 ...

  7. (4)Unity3d镜头

    Input.GetMouseButton()://获取鼠标按钮状态,0-鼠标左键,1-鼠标右键,2-鼠标中键: Input.GetAxis("Mouse X ") //鼠标水平向移 ...

  8. OceanBase数据库实践入门——手动搭建OceanBase集群

    前言 目前有关OceanBase功能.案例.故事的文章已经很多,对OceanBase感兴趣的朋友都想安装一个数据库试试.本文就是分享初学者如何手动搭建一个OceanBase集群.这也是学习理解Ocea ...

  9. Centos7源码安装MySQL5.7

    a.连接数据库报111 从一台linux远程连接另一台linux上的MySQL,出现ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx. ...

  10. python使用Queue进行进程间通信

    1.Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信. 可以使用multiprocessing模块的Queue实现多进程之间的数据传递, Queue本身是一个消息列队程序: f ...