socket_tcp_函数_自用笔记

本文介绍了TCP Socket编程的基础知识,包括socket函数创建套接字、bind函数绑定地址、listen和connect进行连接、accept建立链接、read/write进行数据交换以及close关闭服务。详细讲解了每个步骤的函数使用和参数含义,并提供了简单的服务端和客户端源代码。
摘要由CSDN通过智能技术生成

后面附有源代码,简单实现了通信,有许多不足的地方,后续更新完善。

目录

1、socket函数

socket函数用于创建一个新的socket,也就是向系统申请一个socket资源.

2、bind() 函数

bind() 函数把一个地址族中的特定地址赋给 socket。

 3、listen()、connect() 主机监听、从机链接.

客户端调用connect()连接服务器,服务器调用listen()等待客户端的连接。

 4 、accept 建立链接

服务端与客户端建立链接。

 5、read和write函数,读写

当两者建立了连接之后,就可以开始通过网络I/O模型进行数据交换了。

 6、close关闭服务

关闭连接,在数据传输完毕之后就要进行链接的关闭,一般关闭由客户端进行发起。

结构体

 代码实现

服务端

客户端


1、socket函数

socket函数用于创建一个新的socket,也就是向系统申请一个socket资源.

int socket(int domain, int type, int protocol);

三个参数,返回值非负数表示成功,-1表示出错


1.domain:协议域,常见的协议组用
AF_INET 是 IPv4 网络协议的套接字类型
AF_INET6  是IPv6的
AF_LOCAL AF_ROUTE 是 Unix 系统本地通信。
协议族决定了socket的地址类型,在通信中必须采用相应的地址.

2.type: 指定socket的类型.
指定socket类型。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET
SOCK_STREAM: 提供面向连接的稳定数据传输,即TCP协议。
SOCK_DGRAM: 使用不连续不可靠的数据包连接。
SOCK_SEQPACKET: 提供连续可靠的数据包连接。
SOCK_RAW: 提供原始网络协议存取。
SOCK_RDM: 提供可靠的数据包连接。
SOCK_PACKET: 与网络驱动程序直接通信。

3.protocol:故名思意,就是指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议.


2、bind() 函数

bind() 函数把一个地址族中的特定地址赋给 socket。

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

 三个参数


sockfd:即socket描述字,它是通过socket()函数创建了,唯一标识一个socket。bind()函数就是将给这个描述字绑定一个名字。socket()的返回值。


addr:一个const struct sockaddr *指针,指向要绑定给sockfd的协议地址。这个地址结构根据地址创建socket时的地址协议族的不同而不同。


addrlen:对应的是地址的长度。


 3、listen()、connect() 主机监听、从机链接.

客户端调用connect()连接服务器,服务器调用listen()等待客户端的连接。

int listen(int sockfd, int backlog);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

listen函数会把sockfd的套接字标记为被动的监听listen状态,之后服务端与客户端通信的整个流程中sockfd只有listen和closed两种状态,第二个参数backlog代表等待队列的最大长度。
//返回值:成功则为0,失败为-1 


connect函数的第一个参数即为客户端的socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度。客户端通过调用connect函数来建立与TCP服务器的连接。
//返回值:成功则为0,失败为-1 


 4 、accept 建立链接

服务端与客户端建立链接。

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

第一

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白熊不爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值