13TCP 函数用法

1.socket函数 int socket(int domain, int type,int protocol);
成功时返回文件描述符,失败时返回-1
domain:
AF_INET ipv4通讯协议
AF_INET6 ipv6
AF_UNIX 只能够用于单一的Unix系统进程间通信
type:
SOCK_STREAM 流式套接字,唯一对应于TCP
SOCK_DGRAM 数据包套接字,唯一对应与UDP
SOCK_RAW 原始套接字
protocol:
由于我们指定了type,所以这个地方我们一般只要用0来代替就可以了

2.bind函数 int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
成功调用返回0,出错返回-1
sockfd: 是由socket调用返回的文件描述符.
addrlen: 是sockaddr结构的长度.
my_addr: 是一个指向sockaddr的指针. 在中有 sockaddr的定义

struct sockaddr{
unisgned short as_family; //2字节
char sa_data[14]; //14字节
};

不过由于系统的兼容性,我们一般不用这个头文件,而使用另外一个结构(struct sockaddr_in) 来代替.在中有sockaddr_in的定义

struct sockaddr_in{
unsigned short sin_family; //2字节
unsigned short int sin_port; //2字节,端口号str
uct in_addr sin_addr; //4字节,结构体
unsigned char sin_zero[8];//填充字节,必须清0
}

struct in_addr{
uint32_t s_addr; //4个字节,32位网络字节序的ip地址
}

3.listen函数 int listen(int sockfd,int backlog)
成功返回0;出错-1
sockfg 是bind后的文件描述符.
backlog 一般写5 设置请求排队的最大长度.当有多个客户端程序和服务端相连时, 使用这个表示可以介绍的排队长度. listen函数将bind的文件描述符变为监听套接字.返回的情况和bind一样.

4.accept函数 int accept(int sockfd, struct sockaddr *addr,int *addrlen)
accept成功时返回最后的服务器端的文件描述符,这个时候服务器端可以向该描述符写信息了. 失败时返回-1
sockfd 经过前面socket创建并通过bind、listen函数的fd
addr
addrlen 后两个参数是用来给客户端的程序填写的,服务器端只要传递指针就可以了,分别获取ip地址和端口号
.bind,listen和accept是服务器端用的函数,accept调用时,服务器端的程序会一直阻塞到有一个 客户程序发出了连接.

5.connect函数 int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)
.成功时返回0,sockfd是同服务端通讯的文件描述符 失败时返回-1.
sockfd: socket返回的文件描述符.
serv_addr: 储存了服务器端的连接信息.其中sin_add是服务端的地址
addrlen: serv_addr的长度

6.网络发送数据 ssize_t send(int sockfd, const void *buf,size_t len,int flags);
sockfd 发送端的套接字文件描述符
buf 存放应用程序要发送的数据的缓冲区
len 实际要发送的数据的字节数
flags 标志 0则与write一样
MSG_DONTWAIT 非阻塞版本
MSG_OOB 用于发射TCP类型的带外数据

7.网络数据接收 ssize_t recv(int sockfd, void *buf,size_t len,int flags);
sockfd 接收端的套接字文件描述符
buf 存放应用程序要接收的数据的缓冲区
len 缓冲区buf的长度
flags 标志 0 则与read一样
MSG_DONTWAIT 非阻塞版本
MSG_OOB 用于发射TCP类型的带外数据
MSG_PEEK 不移动缓冲区读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值