socket---TCP服务器界面
代码如下,操作在后
#include "resource1.h"
#include<winsock2.h>#pragma comment(lib,"ws2_32.lib")
#define DEFAULT_iPort 5000
LRESULT CALLBACK DialProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
DialogBox(hInstance,(LPCSTR)IDD_FORMVIEW, NULL,(DLGPROC)DialProc);
return 0;
}
LRESULT CALLBACK DialProc(HWND hDIg, UINT uID, WPARAM wParam, LPARAM lParam)
{
char ip[16];
char port[5];//端口号
char recvBuf[1000];//缓存区大小
char sendBuf[1000];
SOCKET sListen, sAccept;
SOCKADDR_IN ser, cli;
int iLen = sizeof(cli);
sListen = socket(AF_INET, SOCK_STREAM,0);
sAccept= socket(AF_INET, SOCK_STREAM,0);
switch (uID)
{
case WM_COMMAND://对话框消息
switch(wParam)
{
case IDC_IPSTART:
{
GetDlgItemText(hDIg, IDC_IP,ip, 16);
GetDlgItemText(hDIg, IDC_PORT,port, 16);
ser.sin_family = AF_INET;
ser.sin_addr.s_addr = inet_addr(ip);
ser.sin_port = htons(atoi(port));
bind(sListen, (sockaddr *)&ser, sizeof(ser));
listen(sListen, 5);
sAccept = accept(sListen, (sockaddr *)&cli, &iLen);
if (INVALID_SOCKET == sAccept)
{
SetDlgItemText(hDIg, IDC_EDIT1, "服务器创建失败");
}
else {
SetDlgItemText(hDIg, IDC_RECVBUF, "服务器创建成功");
}
}
break;
case IDC_RECVBUF:
if (INVALID_SOCKET == sAccept)
{
}
else
{
recv(sAccept, recvBuf, sizeof(recvBuf), 1000);
SetDlgItemText(hDIg, IDC_RECVBUF, recvBuf);
}
break;
case IDC_SENDBUF:
GetDlgItemText(hDIg, IDC_SENDBUF, sendBuf, 1000);
send(sAccept, sendBuf, sizeof(recvBuf), 1000);
SetDlgItemText(hDIg, IDC_SENDBUF, "");
break;
case IDC_STOP://关闭窗口
{
closesocket(sAccept);
closesocket(sListen);
WSACleanup();
EndDialog(hDIg,wParam);
}
break;
}
break;
default:
break;
}
return DefWindowProc(hDIg, uID, wParam, lParam);//让系统自动处理一些默认消息
一.
}
资源文件->添加->添加资源->找到如下图所示,新建
二.
把这个字删除,点属性,找到这一个风格把Child换成Overlapped或者Popup都可以(版本不同可能问题不一样)
然后往这个大界面上加东西,打开工具箱
选择你想要的,然后创建界面
根据你创建的ID写代码。
例如
我的示例边框ID 是IDC_EDIT1,
代码这样写:
然后创建失败就会在这个边框出现消息
至于代码中的函数会用就行