下面写网络的API
(1)int socket(in family,int type, int protocol);
头文件:#include <sys/types.h>
#include <sys/socket.h>
形参:①family:遵循的通讯协议,宏:AF_INET 为IPV4(通常写这个),AF_INET6 为IPV6
②type:设置通信的协议类型,TCP协议:SOCK_STREAM,DUP协议:SOCK_DGRAM
③protocol:用来指定socket所使用的传输协议编号,一般置0
返回值:成功则返回一个套接字,失败返回-1,网络的API失败好像都返回-1
(2)捆绑
int bind(int socket,const strust sockaddr *myaddr, socklen_t addrlen);
结构体:struct sockaddr
{
u_short sa_family; 填AF_INET时,遵循IPV4
char sa_data[14]; 14字节的特定协议地址
}
现在一帮用其升级版struct sockaddr_in
{
short int sin_family; 遵循的协议
unsigned short int sin_port; 端口号 //不要用网络端口80
struct in_addr sin_addr; 32位地址 struct in_addr { unsigned long s_addr};
unsigned char sin_zero[8]; 填0
}
bind函数的作用:将stocket套接字和myaddr等信息捆绑在一起
在使用时,要注意:
(1)要对addr_in进行初始化:
①bzero(&servaddr,sizeof(servaddr)); 清零函数,在头文件:#include <strings.h>中
②servaddr.sin_family = AF_INET;
③servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //该宏,使本机所以地址都能访问到本机
inet_addr(argv[1]); 函数inet_addr将字符串转换成需要的IP字符串
④serraddr.sin_port = htons(SERV_PORT); //自定义的宏,不要写80
(2)注意使用struct sockaddr_in时,传参要强制类型转换成struct sockaddr
返回值:成功返回0,失败返回-1
(3)设置监听器
int listen(int socket, int backlog);
套接字 监听器个数
返回值:成功返回0,失败返回-1
(4)int accept(int socket, struct sockaddr *cliaddr, socklen_t *addrlen);
套接字 传出参数,返回客户端的地址和端口号(具体信息,都用这个结构体接,用sockaddr_in时候要强制类型转换)
最后一个参数为接收结构体的长度
当不需要使用客户端信息时,可以置空
返回值:失败返回-1,成功返回一个连接表叔父,对该描述符进行读写,相当于,对客户端做接收与发送
(5)int connect(int socket, struct sockaddr *cliaddr, socklen_t *addrlen);
套接字 服务器信息 类型的程度
connect 和bind的形参一致,区别在与bind的参数为自己的,connect为要通信的单位
(6)发送,接收,可以使用write,send和read,recv函数
(1)int socket(in family,int type, int protocol);
头文件:#include <sys/types.h>
#include <sys/socket.h>
形参:①family:遵循的通讯协议,宏:AF_INET 为IPV4(通常写这个),AF_INET6 为IPV6
②type:设置通信的协议类型,TCP协议:SOCK_STREAM,DUP协议:SOCK_DGRAM
③protocol:用来指定socket所使用的传输协议编号,一般置0
返回值:成功则返回一个套接字,失败返回-1,网络的API失败好像都返回-1
(2)捆绑
int bind(int socket,const strust sockaddr *myaddr, socklen_t addrlen);
结构体:struct sockaddr
{
u_short sa_family; 填AF_INET时,遵循IPV4
char sa_data[14]; 14字节的特定协议地址
}
现在一帮用其升级版struct sockaddr_in
{
short int sin_family; 遵循的协议
unsigned short int sin_port; 端口号 //不要用网络端口80
struct in_addr sin_addr; 32位地址 struct in_addr { unsigned long s_addr};
unsigned char sin_zero[8]; 填0
}
bind函数的作用:将stocket套接字和myaddr等信息捆绑在一起
在使用时,要注意:
(1)要对addr_in进行初始化:
①bzero(&servaddr,sizeof(servaddr)); 清零函数,在头文件:#include <strings.h>中
②servaddr.sin_family = AF_INET;
③servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //该宏,使本机所以地址都能访问到本机
inet_addr(argv[1]); 函数inet_addr将字符串转换成需要的IP字符串
④serraddr.sin_port = htons(SERV_PORT); //自定义的宏,不要写80
(2)注意使用struct sockaddr_in时,传参要强制类型转换成struct sockaddr
返回值:成功返回0,失败返回-1
(3)设置监听器
int listen(int socket, int backlog);
套接字 监听器个数
返回值:成功返回0,失败返回-1
(4)int accept(int socket, struct sockaddr *cliaddr, socklen_t *addrlen);
套接字 传出参数,返回客户端的地址和端口号(具体信息,都用这个结构体接,用sockaddr_in时候要强制类型转换)
最后一个参数为接收结构体的长度
当不需要使用客户端信息时,可以置空
返回值:失败返回-1,成功返回一个连接表叔父,对该描述符进行读写,相当于,对客户端做接收与发送
(5)int connect(int socket, struct sockaddr *cliaddr, socklen_t *addrlen);
套接字 服务器信息 类型的程度
connect 和bind的形参一致,区别在与bind的参数为自己的,connect为要通信的单位
(6)发送,接收,可以使用write,send和read,recv函数