#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_prot表示端口号,例如:21 或者 80 或者 27015,总之在0 ~ 65535之间;
sin_addr表示32位的IP地址,例如:192.168.1.5 或 202.96.134.133;
sin_zero表示填充字节,一般情况下该值为0;
Socket数据的赋值实例:
*/
// 实例
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr)); // 将结构体清零 主要是sin_zero表示填充字节为零
addr.sin_family = AF_INET; //(TCP/IP – IPv4)
addr.sin_port = htons(port_out); // 绑定端口号 htons将一个无符号短整型数值转换为网络字节序
addr.sin_addr.s_addr = htonl(INADDR_ANY); // 绑定IP htonl就是把ip字节顺序转化为网络字节顺序
// INADDR_ANY 泛指机器所有的IP因为有些电脑不只有一个网卡
* **把名字和套接字相关联 bind()**
int bind( int sockfd, const struct sockaddr * addr, socklen_t * addrlen);
/*
当用socket()函数创建套接字以后,套接字在名称空间(网络地址族)中存在,但没有任何地址给它赋值。bind()把用addr指定的地址赋值给用文件描述符代表的套接字sockfd。addrlen指定了以addr所指向的地址结构体的字节长度。一般来说,该