直接看代码和注释,本部分代码来源于网络视频 服务端: #define WIN32_LEAN_AND_MEAN //Windows.h 包含了早期的sock 1版本的实现,为了避免这些实现影响到sock 2的编译,这里就加入这个宏,尽可
服务端:
#define WIN32_LEAN_AND_MEAN //Windows.h 包含了早期的sock 1版本的实现,为了避免这些实现影响到sock 2的编译,这里就加入这个宏,尽可能引用新的定义以及实现 #include <iostream> #include <Windows.h> #include <Winsock2.h> #ifdef WIN32 #pragma comment(lib, "ws2_32.lib"); //这里库里面包含了对网络通信代码的实现 #endif // WIN32 int main(int argc, char* argv) { WORD wVersion = MAKEWORD(2, 2); WSADATA wData; //启动网络环境 WSAStartup(wVersion, &wData); //创建一个服务端Socket SOCKET _server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in sock_addr; sock_addr.sin_family = AF_INET; sock_addr.sin_port = htons(1111); //这里是因为本地的编码和网络协议的编码不一致,所以需要转换 host to unsigned short sock_addr.sin_addr.S_un.S_addr = INADDR_ANY; //这里表示可以用我本地所有的IP来建立连接,也可以特殊初始化一个IP字符串,表示我只想让网络通信在这个IP上进行 //绑定socket 到某IP以及端口 if (SOCKET_ERROR == bind(_server, (sockaddr *)&sock_addr, sizeof(sockaddr_in))) { std::cout << "socket bind error..." << std::endl; return 0; } //监听客户端连接 if (SOCKET_ERROR == listen(_server, 5)) { std::cout << "socket listen error..." << std::endl; return 0; } sockaddr_in client_sock_addr; int nLen = sizeof(sockaddr_in); SOCKET _client = INVALID_SOCKET; while (true) { //接受客户端连接 _client = accept(_server, (sockaddr *)&client_sock_addr, &nLen); if (INVALID_SOCKET != _client) { std::cout << "get a client connect. IP:" << inet_ntoa(client_sock_addr.sin_addr) << std::endl; } char* return_msg = "I have listened to you..."; int nRet = send(_client, return_msg, strlen(return_msg) + 1, 0); if (nRet <= 0) { std::cout << "send message error..." << std::endl; } closesocket(_client); } //关闭网络环境并作清理 WSACleanup(); return 1; }
客户端:
待续。。。。