基本套接口编程

TCP/UDP端口号总在套接口地址结构中总是以网络字节序来存储。


         

套接口地址结构仅在给定主机上使用,虽然结构中的某些成员(如IP地址和端口号)用在不同主机间的通信中,但结构本身并不参与通信。

为了执行网络I/O,一个进程必须要做的第一件事是调用socket函数,指定期望的通信协议类型(使用IPv4的TCP、使用IPv6的UDP、Unix域字节流协议等)。

#include<sys/socket.h>

int socket(int family,int type,int protocol); (返回非负描述符成功,-1出错)

一般来说,函数socket的参数protocol设置为0,除非用在原始套接口上。


TCP客户用connect函数来建立一个与TCP服务器的连接

#include<sys/socket.h>

int connect(int sockfd,const struct sockaddr* servaddr,socklen_t addrlen);(返回0成功,-1出错)

sockfd是socket函数返回的套接口描述字,第二个和第三个参数分别是指向套接口结构的指针和该结构的大小,套接口结构指针必须包含服务器的IP地址和端口号。

bind函数

函数bind给套接口分配一个本地协议地址

#include<sys/socket.h>

int bind(int socketfd,const struct sockaddr *myaddr,socklen_t addlen);(返回0-成功,-1-出错)

对于TCP,bind可以指定一个端口号,指定一个IP地址,可以两者都指定,也可以一个都不指定。

当服务器启动时,要捆绑众所周知端口,如果TCP客户或服务器不这么做,当调用函数connect或listen时,内核就要为套接口选择一个临时端口,让内核来选择临时端口,这对TCP客户来说是正常的,除非应用要求一个预留窗口;但对TCP服务器来说是极少见的,因为服务器是通过他们的众所周知端口被大家所认识的。

listen函数

函数listen将未连接的套接口转换为被动套接口,指示内核应接受指向此套接口的连接请求,调用函数listen将导致套接口从closed状态转换为listen状态。

accept函数

函数由TCP服务器调用,从已完成连接队列头返回下一个已完成连接。若已完成连接队列为空,则进程睡眠

#include<sys/socket.h>

int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen); 返回:非负描述字-ok,-1-出错)

猜你喜欢

转载自blog.csdn.net/we_are_family678/article/details/80196879