这是 client.cpp 文件。所以有什么问题?我声明这个字符串 'G',我输入昵称然后在这里 ' cout << G << ":"<< sbuffer.Message <
P.S.:我认为我不需要发布 server.cpp 文件,对吗?
#pragma comment(lib, "Ws2_32.lib")
#include <WinSock2.h>
#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;
SOCKADDR_IN addr;
SOCKET sConnect;
string G;
struct Buffer
{
int ID;
char Message[256];
};
int ClientThread()
{ 缓冲区sbuffer;
char buffer[sizeof(sbuffer)] = {0};
for(;; Sleep(10))
{
if(recv(sConnect, buffer, sizeof(sbuffer), NULL))
{
memcpy(&sbuffer, buffer, sizeof(sbuffer));
cout << G << ":" << sbuffer.Message <<endl;
}
}
return 0;
int main()
{ 系统(“cls”);
int RetVal = 0;
WSAData wsaData;
WORD DllVersion = MAKEWORD(2,1);
RetVal = WSAStartup(DllVersion, &wsaData);
if(RetVal != 0)
{
MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR);
exit(1);
}
sConnect = socket(AF_INET, SOCK_STREAM, NULL);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(1234);
addr.sin_family = AF_INET;
cout << "Connect to Masterserver? [ENTER]" <<endl;
getchar();
RetVal = connect(sConnect, (SOCKADDR*)&addr, sizeof(addr));
if(RetVal != 0)
{
MessageBoxA(NULL, "Could not connect to server", "Error", MB_OK | MB_ICONERROR);
main();
}
else
{
string G;
cout << "Nickname: " << endl;
cin >> G;
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE) ClientThread, NULL, NULL, NULL);
for(;; Sleep(10))
{
char* buffer = new char[256];
ZeroMemory(buffer, 256);
cin >> buffer;
getchar();
send(sConnect, buffer, 256, NULL);
}
}
return 0;
最佳答案
您在顶部全局范围内声明的 string G
被您在 main
范围内声明的 string G
覆盖因此,您读入的内容对 ClientThread
方法不可用。删除主范围内的声明。
关于c++ - 字符串 'G' 未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20029785/