Socket是在应用层与TCP/IP协议族之间的一个中间抽象层,是一组网络应用程序的接口,像文件一样,可以使用文件描述符。
网间进程通信由两个进程构成,使用同一种协议,它包括一个五元组(协议,本地IP,远程IP,本地端口,远程端口)
端口:操作系统可分配的资源,由数据结构和IO构成,在网络中可以被寻址,用于标识通信进程。
网络字节序:由于不同计算机有不同的字节存储方式,大端(低地址存储高位)和小端(低地址存储低位),因此使用网络字节序(大端)。
int socket(int domain, int type, int protocol);
domaim: 协议域,有为AF_INET,AF_INET6, AF_LOCAL等。
Type: 套接字类型,SOCK_STREAM流式套接字,SOCK_DGRAM数据报套接字,SOCK_RAW原始套接字
Protocol:当为0时默认选择与第二个参数匹配的类型,在WINDOWS下没有这个参数
返回值:套接字号
int bind(SOCKET socket, const structsockaddr* address,socklen_t address_len);
socket:套接字
address:sockaddr_in 结构体指针,其中包含了要结合的地址和端口
sockaddr_in.sin_family //协议族
sockaddr_in.sin_prot //端口号,要转换为网络字节序
sockaddr_in.sin_addr.s_addr //地址,htonl(INADDR_ANY)表任何
socklen_t: address缓冲区的长度
返回值:成功返回0
Int listen(int sockfd, int backlog) //连接套接字,使它成为服务器
Sockfd:套接字号
Backlog:处理多个连接,一般上限为30
返回值:
int accept(intsockfd, struct sockaddr *addr, socklen_t *addrlen);
sockfd:套接字号
sockaddr*:sockaddr_in指针
socklen_t:返回一个实际地址的参数
返回值:返回一个描述所接受包的SOCKET类型的值、
int connect( SOCKET s, conststruct sockaddr * name, int namelen);
s: 未连接socket
name: sockaddr_in指针
namelen: sockaddr_in长度
int recv(SOCKET socket,char FAR* buf, int len, int flags);
socket: 已连接上的对方的socket
buf: 字符缓冲
len:字符长度
flag:指定调用方式
返回值:无错误返回读入的字节数
Int send(SOCKET s, constchar* buf, int len, int flag)
s:一个用于标识已连接对方的套接字
buf:包含待发送数据的缓冲区
len:缓冲区中数据的长度。
flags:调用执行方式。
|
|