使用多线程加自定义结构体数据发送以及select函数,实现跨平台网络客户端
#define WIN32_LEAN_AND_MEAN
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#ifdef _WIN32
#include <windows.h>
#include <WinSock2.h>
#else
#include<unistd.h>
#include<arpa/inet.h>
#include<string.h>
#define SOCKET int
#define INVALID_SOCKET (SOCKET)(~0)
#define SOCKET_ERROR (-1)
#endif
#include <stdio.h>
#include <thread>
#pragma comment(lib, "ws2_32.lib")
enum CMD {
CMD_LOGIN,
CMD_LOGIN_RESULT,
CMD_LOGOUT,
CMD_LOGOUT_RESULT,
CMD_NEW_USER_JOIN,
CMD_ERROR,
};
// 消息头
struct DataHeader {
short dataLength;
short cmd;
};
struct Login :public DataHeader {
Login() {
dataLength = sizeof(Login);
cmd = CMD_LOGIN;
}
char userName[32];
char PassWord[32];
};
struct LoginResult : public DataHeader {
LoginResult() {
dataLength = sizeof(LoginResult);
cmd = CM