今天,第一次接触了MFC下的socket编程,其实哀差闷一直对网络编程非常感兴趣的,但是由于我自己也不知道的种种原因,一直没有开始去学网络编程,直到今天偶然的机会接触了Socket。所以整理了一个简单的demo。
注意事项
在新建一个mfc工程的时候一定要 勾选“windows套接字”
服务端(server)
在这里哀差闷是创建了一个基于对话框的mfc程序,在点击Start Listening按钮后,就开始侦听某一端口,当有客户端连接时,弹出提示对话框“有连接到来”
关键源码参考:
// TODO: 在此添加控件通知处理程序代码 //socket //************套接字初始化******* WSAData wsadata; bool bRet = false; do{ if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata)) break; if (2 != LOBYTE(wsadata.wVersion) || 2 != HIBYTE(wsadata.wVersion)) break; //***********套接字初始化完成******* //IP and 端口 //获取一个套接字 SOCKET sock_server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in addr_server = { 0 }; addr_server.sin_family = AF_INET; addr_server.sin_port = htons(18080); //给获取的套接字 绑定IP和端口 bind(sock_server, (SOCKADDR*)&addr_server, sizeof(addr_server)); listen(sock_server, SOMAXCONN);//监听 SOCKET socket_client = accept(sock_server, nullptr, nullptr); MessageBoxW(L"有连接到来"); //有客户端连接时提示 bRet = true; } while (false);
客户端(Client)
同样是创建一个基于对话框的mfc程序,点击“Connect Server”按钮后连接服务端,服务端提示有连接到来。
关键源码参考
// TODO: 在此添加控件通知处理程序代码 //socket //************套接字初始化******* WSAData wsadata; bool bRet = false; do{ if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata)) break; if (2 != LOBYTE(wsadata.wVersion) || 2 != HIBYTE(wsadata.wVersion)) break; //***********套接字初始化完成******* SOCKET sock_connect = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sockaddr_in addr_server = { 0 }; addr_server.sin_family = AF_INET; addr_server.sin_port = htons(18080); //指定连接IP addr_server.sin_addr.S_un.S_addr = inet_addr("121.42.48.161"); connect(sock_connect, (SOCKADDR*)&addr_server, sizeof(addr_server)); bRet = true; } while (false);
Comments | NOTHING