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

相关函数socketacceptconnectlisten

表头文件#include<sys/types.h>#include<sys/socket.h>

定义函数 intbind(int sockfd,struct sockaddr * my_addr,int addrlen);

函数说明bind()用来设置给参数sockfdsocket 一个名称。此名称由参数my_addr指向一sockaddr结构,对于不同的socket domain定义了一个通用的数据结构

3.listen(等待连接)

相关函数socketbindacceptconnect

表头文件#include<sys/socket.h>

定义函数 intlisten(int s,int backlog);

函数说明listen()用来等待参数ssocket 连线。参数backlog指定同时能处理的最大连接要求,如果连接数目达此上限则client端将收到ECONNREFUSED的错误。Listen()并未开始接收连线,只是设置socketlisten模式,真正接收client端连线的是accept()。通常listen()会在socket()bind()之后调用,接着才调用accept()。返回值成功则返回0,失败返回-1

4.connect(建立socket连接)

相关函数socketbindlisten

表头文件#include<sys/types.h>#include<sys/socket.h>

定义函数 intconnect (int sockfd,struct sockaddr * serv_addr,int

addrlen);

函数说明connect()用来将参数sockfdsocket 连至参数serv_addr指定的网络地址。结构sockaddr请参考bind()。参数addrlensockaddr的结构长度。返回值成功则返回0,失败返回-1

5.accept(接受socket连线)

相关函数socketbindlistenconnect

表头文件#include<sys/types.h>#include<sys/socket.h>

定义函数 intaccept(int s,struct sockaddr * addr,int * addrlen);函数说明accept()用来接受参数ssocket 连线。

6.send(经socket传送数据)

相关函数sendtosendmsgrecvrecvfromsocket

表头文件#include<sys/types.h>

#include<sys/socket.h>

定义函数 intsend(int s,const void * msg,int len,unsigned int falgs);

函数说明send()用来将数据由指定的socket传给对方主机。

7.recv(经socket接收数据)

相关函数recvfromrecvmsgsendsendtosocket

表头文件#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编辑  收藏  举报

导航