TCP聊天室04 客户端程序设计(阻塞模式)

本文详细讲解了如何设计一个基于TCP协议的客户端程序,采用阻塞模式进行通信。通过阅读,读者将了解到TCP客户端的工作原理及实现细节。
摘要由CSDN通过智能技术生成

//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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值