#include"tcpSocket.h" bool init_Socket() { WSADATA wsadata; //定义变量wsadata if (0 != WSAStartup(MAKEWORD(2,2),&wsadata)) //WSA:windows socket ansyc windows异步套接字;2.2版本 { //不等于0失败 //printf("[error]WSAStartup failed code %d", WSAGetLastError()); err("WSAStartup"); return false; } return true; } bool close_Socket() { if (0 != WSACleanup()) { err("WSACleanup"); return false; } return true; } SOCKET create_serverSocket() { //1.创建一个空socket,AF_INET代表IPV4,SOCK_STREAM流式套接字 SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (INVALID_SOCKET == fd) { err("socket"); return INVALID_SOCKET; //错误就返回,正确就继续 } //~0(对0取反) 对于有符号来说是-1,对于无符号来说是最大值 //2.给socket绑定本地的ip地址和端口号 struct sockaddr_in addr; //结构体addr addr.sin_family = AF_INET; //协议族IPV4 addr.sin_port = htons(PORT); //本地字节序转成网络字节序,大端存储和小端存储的相互转换 addr.sin_addr.S_un.S_addr = ADDR_ANY; //绑定本地任意ip if (SOCKET_ERROR == bind(fd, (struct sockaddr*)&addr, sizeof(addr))) //(struct sockaddr*)强制转换 { err("bind"); return INVALID_SOCKET; } //3.开始监听 listen(fd, 10); return fd; } SOCKET create_clientSocket(const char * ip) { //1.创建一个空socket,AF_INET代表IPV4,SOCK_STREAM流式套接字 SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (INVALID_SOCKET == fd) { err("socket"); return INVALID_SOCKET; //错误就返回,正确就继续 } //~0(对0取反) 对于有符号来说是-1,对于无符号来说是最大值 //2.给socket绑定服务端的ip地址和端口号 struct sockaddr_in addr; //结构体addr addr.sin_family = AF_INET; //协议族IPV4 addr.sin_port = htons(PORT); //本地字节序转成网络字节序,大端存储和小端存储的相互转换 addr.sin_addr.S_un.S_addr = inet_addr(ip); //绑定服务器ip,ip转换格式 // if (INVALID_SOCKET == connect(fd, &addr, sizeof(addr))) { err("connect"); return INVALID_SOCKET; } return fd; }