简述基本TCP套接字编程(一)

最近在看UNP的基本TCP套接字编程这一章,现总结如下:

首先用一张图阐述一下基本TCP socket的C/S框架


(1)socket函数

#include<sys/socket.h>
int socket(int family,int type,int protocol)

函数说明:

用于创建一个套接字

参数说明:

family制定协议族,该参数也被称作协议域。具体常值如下表:

family说明
AF_INETIPv4协议
AF_INET6IPv6协议
AF_LOCALUnix域协议
AF_ROUTE路由套接字
AF_KEY密钥套接字
type指明socket类型。具体如下表:

type说明
SOCK_STREAM字节流套接字
SOCK_DGRAM数据报套接字
SOCK_SEQPACKET有序分组套接字
SOCK_RAW原始套接字
protocol设为下表的某个协议类型的常值,或者设为0

protocol说明
IPPROTO_TCPTCP传输协议
IPPROTO_UDPUDP传输协议
IPPROTO_SCTPSCTP传输协议

返回值:

socket函数成功时,返回一个被称为套接字描述符(socket descriptor)的小的非负整数,其也被简称为sockfd;失败返回-1


(2)connect函数

#include<sys/socket.h>
int connect(int sockfd,struct sockaddr *servaddr,socklen_t addrlen)
函数说明:
用于与TCP服务器建立连接,调用connect函数将激发三次握手。connect函数导致当前套接字从CLOSED状态转移到SYN_SENT状态,若成功再转移到ESTABLISHED状态。若connect失败必须close当前套接字并重新调用socket
参数说明:
sockfd是socket函数返回的套接字描述符
servaddr是一个指向套接字地址结构的指针
addrlen指定套接字地址结构的大小
返回值:
若成功为0,出错则为-1


(3)bind函数

#include<sys/socket.h>
int bind(int sockfd,struct sockaddr *myaddr,socklen_t addrlen)
函数说明:

bind函数将一个本地协议地址赋予一个套接字。对于网际网协议,协议地址是32位的IPv4地址或128位IPv6地址与16位TCP或UDP端口号的组合。

调用bind可以指定IP地址或端口号,可以根据下表设置sin_addr和sin_port或sin6_addr和sin6_port

IP地址端口结果
通配地址0内核选择IP地址和端口
通配地址非0内核选择IP地址,进程指定端口
本地IP地址0进程指定IP地址,内核选择端口
本地IP地址非0进程指定IP地址和端口
对于IPv4来说,通配地址由常值INADDR_ANY指定,其值一般为0,它告知内核去选择IP地址,常写作:

struct sockaddr_in servaddr;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);

参数说明:

sockfd是socket函数返回的套接字描述符
myaddr是一个指向套接字地址结构的指针
addrlen指定套接字地址结构的大小
返回值:

成功返回0,出错-1




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值