直接看代码和注释,本部分代码来源于网络视频
服务端:
#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;
}
客户端:
待续。。。。