//Client.cpp
/*--------------------------------------------------------------------
使用 TCP 协议的聊天室例子程序(客户端)
--------------------------------------------------------------------*/
#include <windows.h>
#include "resource.h"
#include <strsafe.h>
#include "Message.h"
#include "Msg.h"
#include <process.h>
#pragma comment(lib,"WS2_32.lib")
TCHAR szApp[] = TEXT("聊天室消息客户端");
typedef struct SSockParam{//封装传给工作线程的众多参数
TCHAR szUser[32];//In
TCHAR szPwd[32];//In
TCHAR szText[256];//In
char szServer[16];//In
HWND hWnd;//In
SOCKET hSock;//Out
int iLastTime;//Dynamic
}SSOCKPARAM, *PSSOCKPARAM;
BOOL CALLBACK DlgProc2(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
DWORD WINAPI WorkThread(LPVOID lpParameter);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow)
{
DialogBox(hInstance, TEXT("CHATCLIENT"), NULL, DlgProc);
return 0;
}
void EnableWndCtrls(HWND hWnd, BOOL bEnable)
{
EnableWindow(GetDlgItem(hWnd, IDC_SERVER), bEnable);
EnableWindow(GetDlgItem(hWnd, IDC_USER), bEnable);
EnableWindow(GetDlgItem(hWnd, IDC_PASS), bEnable);
EnableWindow(GetDlgItem(hWnd, IDC_LOGIN), bEnable);
}
unsigned int WINAPI WorkProc(void* pParam)
{
PSSOCKPARAM pSockParam = (PSSOCKPARAM)(pParam);
char szBuff[512]; memset(szBuff, 0, sizeof(char)*512); int iRet = 0;
PSMSGPKG pMsg = (PSMSGPKG)szBuff;
TCHAR szSpar[] = TEXT(" : ");
//将编辑框(服务器IP、用户名、密码)及登录按钮变灰色
EnableWndCtrls(pSockParam->hWnd, FALSE);
/*********************************************************************
创建 socket
*********************************************************************/
SOCKADDR_IN stSa; memset(&stSa, 0, sizeof(SOCKADDR_IN));
if(inet_addr(pSockParam->szServer) == INADDR_NONE){
MessageBox(pSockParam->hWnd, TEXT("无效的服务器IP地址!"), szApp, MB_OK|MB_ICONSTOP);
EnableWndCtrls(pSockParam->hWnd, TRUE);
return -1;
}
stSa.sin_family = AF_INET;
stSa.sin_addr.S_un.S_addr = inet_addr(pSockParam->szServer);//指定主机
stSa.sin_port = htons(1234);//指定端口号
SOCKET hWorkSock = socket(AF_INET, SOCK_STREAM, 0);
pSockParam->hSock = hWorkSock;
/*********************************************************************
连接到服务器
*********************************************************************/
if(connect(hWorkSock