任务目标
编写Win32程序模拟实现基于WSAAsyncSelect模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递。客户端向服务器端发送“请输出从1到1000内所有的质数”,服务器回应客户端给出结果。
效果图
核心代码
服务器端:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "WS2_32") // 链接到WS2_32.lib
#include<math.h>
#define WM_SOCKET WM_USER + 101 // 自定义消息
class CInitSock
{
public:
CInitSock(BYTE minorVer = 2, BYTE majorVer = 2)
{
// 初始化WS2_32.dll
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if(::WSAStartup(sockVersion, &wsaData) != 0)
return;
}
~CInitSock()
{
::WSACleanup();
}
};
CInitSock theSock; //加载套接字库
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
bool isprime(int p){//判断p是否为质数
int sq=(int)sqrt(p);
bool flag=true;
int i;
for(i=2;i<=sq;i++){
if(p%i==0){
flag=false;
break;
}
}
if(!flag&&i<=sq)