您的位置:首页 > 理论基础 > 计算机网络

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

2016-04-26 15:05 477 查看
最近在看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
9c1a
函数
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: