#define _CRT_SECURE_NO_WARNINGS 1#pragma warningdisable4996#include winsock2h#include stdioh#include windowsh#include iostream#include string#include sstream#pragma commentlibWS2_32lib#define msg_Leng
首先,这段代码是一个基于TCP协议的聊天室客户端,它使用了Winsock2库实现网络通信。以下是代码的逐行解释:
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:4996)
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <string>
#include <sstream>
#pragma comment(lib,"WS2_32.lib")
#define msg_Length 256
#define name_Length 30
using namespace std;
这里包含了所需的头文件和库,并定义了一些常量和变量。
char name[name_Length] = "";//初始化昵称
char name1[name_Length] = "";//初始化备用昵称
char msg[msg_Length];//初始化信息
int group[10];//群组号
int qun = 1;//群组计数
int ID = 0;//用户ID
int qlh = 0;//用户已经加入的群组
这里定义了一些变量,如昵称、消息、群组号、用户ID等。
DWORD WINAPI sending(LPVOID e) {
//发送进程函数,用于向服务器发送消息
}
这里定义了发送进程的函数,使用了Windows API中的线程函数CreateThread()。
DWORD WINAPI reciving(LPVOID e) {
//接收进程函数,用于接收服务器返回的消息
}
这里定义了接收进程的函数,也是使用了CreateThread()函数。
int main() {
HANDLE Process[2];
DWORD clientID;//进程ID
// 初始化WS2_32.dll
WSADATA wsaData;
WORD banben = MAKEWORD(2, 2);
WSAStartup(banben, &wsaData);
//套接字创建
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET) {
cout << "连接失败" << endl;
WSACleanup();
exit(1);
}
//填写信息
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(8888);
servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
//连接服务器
if (connect(sock, (sockaddr*)&servAddr, sizeof(servAddr)) == -1) {
cout << "连接失败" << endl;
WSACleanup();
exit(1);
}
else {
cout << "与服务器连接成功!" << endl;
}
//进程创建,分别为发送进程和接收进程
Process[0] = CreateThread(NULL, NULL, sending, &sock, 0, &clientID);
Process[1] = CreateThread(NULL, NULL, reciving, &sock, 0, &clientID);
//参数:安全性、堆栈大小(默认)、发送/接收线程函数、函数参数、执行延迟、线程ID--返回值
ID = clientID;
// 等待线程运行结束
WaitForMultipleObjects(2, Process, true, INFINITE);
CloseHandle(Process[0]);
CloseHandle(Process[1]);
//关闭线程
system("pause");
// 关闭套节字
closesocket(sock);
WSACleanup();
return 0;
}
这里是程序的主函数,它首先初始化了Winsock库,然后创建了一个套接字并连接到服务器。接下来,它创建了发送进程和接收进程,并等待它们运行结束。最后,关闭了套接字和Winsock库,并返回0
原文地址: https://www.cveoy.top/t/topic/eHtB 著作权归作者所有。请勿转载和采集!