字符串'G'未显示

String 'G' is not showing

本文关键字:显示 字符串      更新时间:2023-10-16

所以这是client.cpp文件。那么问题出在哪里呢?我声明这个字符串'G',我输入昵称,然后在这里'cout<lt;G<lt;":"<lt;sbuffer。消息<

附言:我想我不需要发布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()

{缓冲区缓冲区;

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方法不可用。删除主范围中的声明。

如果这都是同一个文件,那么你声明G两次,而你只应该声明一次。

// string G;
cout << "Nickname: " << endl;
cin >> G;