UPD通讯
2. API
详细API请参考:https://pubs.opengroup.org/onlinepubs/007908799/xns/syssocket.h.html
- 创建套接字的函数是socket()
int socket(int domain, int type, int protocol);
/\*
- 其中 “int domain”参数表示套接字要使用的协议簇,协议簇的在“linux/socket.h”里有详细定义,常用的协议簇:
AF\_UNIX(本机通信)
AF\_INET(TCP/IP – IPv4)
AF\_INET6(TCP/IP – IPv6)
- 其中 “type”参数指的是套接字类型,常用的类型有:
SOCK\_STREAM(TCP流)
SOCK\_DGRAM(UDP数据报)
SOCK\_RAW(原始套接字)
- 最后一个 “protocol”一般设置为“0”,也就是当确定套接字使用的协议簇和类型时,这个参数的值就为0,但是有时候创建原始套接字时,并不知道要使用的协议簇和类型,也就是domain参数未知情况下,这时protocol这个参数就起作用了,它可以确定协议的种类。
socket是一个函数,那么它也有返回值,当套接字创建成功时,返回套接字,失败返回“-1”,错误代码则写入“errno”中。
\*/
// 实例
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/socket.h>
int sock_fd_tcp;
int sock_fd_udp;
sock_fd_tcp = socket(AF_INET, SOCK_STREAM, 0); // 创建tcp通讯的套接字
sock_fd_udp = socket(AF_INET, SOCK_DGRAM, 0); // 创建udp通讯的套接字
if(sock_fd_tcp < 0) {
perror("TCP SOCKET ERROR!\n");
exit(-1);
}
if(sock_fd_udp < 0) {
perror("UDP SOCKET ERROR!\n");
exit(-1);
}
- 地址与端口设置的结构体 sockaddr_in
#include <netinet/in.h>
struct sockaddr\_in{
unsigned short sin_family;
unsigned short int sin_port;
struct in\_addr sin_addr;
unsigned char sin_zero[8];
};
struct in\_addr{
unsigned long s_addr;
};
/\*
sin\_family表示地址类型,对于基于TCP/IP传输协议的通信,该值只能是AF\_INET;
sin