socket通信API函数
sockaddr
struct sockaddr {
unsigned short sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};
sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF_INET。实际意义就是
指定通信的地址类型。如果是TCP/IP通信,则该值为AF_INET。
sa_data是14字节协议地址。最多使用 14个字符长度,用来保存 IP地址和端口信息。
此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。
但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构
sockaddr_in
sockaddr_in(在netinet/in.h中定义):
struct sockaddr_in {
short int sin_family; /* Address family */指定通信的地址类型。如果是TCP/IP通信,则该值为AF_INET
unsigned short int sin_port; /* Port number */端口号
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[8]; /* Same size as struct sockaddr */sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
};
struct in_addr {
unsigned long s_addr;
};
重要的socket API:
1.socket(建立一个socket通信管道
表头文件#include<sys/types.h>
#include<sys/socket.h>
定义函数 intsocket(int domain,int type,int protocol);
函数说明socket()用来建立一个新的socket,也就是向系统注册,通知系统建立一通信端口。
2.bind(绑定socket)
相关函数socket,accept,connect,listen
表头文件#include<sys/types.h>#include<sys/socket.h>
定义函数 intbind(int sockfd,struct sockaddr * my_addr,int addrlen);
函数说明bind()用来设置给参数sockfd的socket 一个名称。此名称由参数my_addr指向一sockaddr结构,对于不同的socket domain定义了一个通用的数据结构
3.listen(等待连接)
相关函数socket,bind,accept,connect
表头文件#include<sys/socket.h>
定义函数 intlisten(int s,int backlog);
函数说明listen()用来等待参数s的socket 连线。参数backlog指定同时能处理的最大连接要求,如果连接数目达此上限则client端将收到ECONNREFUSED的错误。Listen()并未开始接收连线,只是设置socket为listen模式,真正接收client端连线的是accept()。通常listen()会在socket(),bind()之后调用,接着才调用accept()。返回值成功则返回0,失败返回-1。
4.connect(建立socket连接)
相关函数socket,bind,listen
表头文件#include<sys/types.h>#include<sys/socket.h>
定义函数 intconnect (int sockfd,struct sockaddr * serv_addr,int
addrlen);
函数说明connect()用来将参数sockfd的socket 连至参数serv_addr指定的网络地址。结构sockaddr请参考bind()。参数addrlen为sockaddr的结构长度。返回值成功则返回0,失败返回-1。
5.accept(接受socket连线)
相关函数socket,bind,listen,connect
表头文件#include<sys/types.h>#include<sys/socket.h>
定义函数 intaccept(int s,struct sockaddr * addr,int * addrlen);函数说明accept()用来接受参数s的socket 连线。
6.send(经socket传送数据)
相关函数sendto,sendmsg,recv,recvfrom,socket
表头文件#include<sys/types.h>
#include<sys/socket.h>
定义函数 intsend(int s,const void * msg,int len,unsigned int falgs);
函数说明send()用来将数据由指定的socket传给对方主机。
7.recv(经socket接收数据)
相关函数recvfrom,recvmsg,send,sendto,socket
表头文件#include<sys/types.h>
#include<sys/socket.h>
定义函数 intrecv(int s,void *buf,int len,unsigned int flags);
函数说明recv()用来接收远端主机经指定的socket传来的数据,并把数据存到由参数buf指向的内存空间,参数len为可接收数据的最大长度。
posted on 2016-09-10 22:23 sichenzhao 阅读(160) 评论(0) 编辑 收藏 举报