繁体   English   中英

C ++客户端无法发送到服务器/ Winsock

[英]C++ client fails to send to server / Winsock

我正在使用高级客户端服务器程序,在其中我将操纵板的代码(已按下的按钮)发送到服务器。 由于我发送了多个游戏手柄代码,因此在我的C ++代码中,我必须重复客户端代码段。

我想到每次有东西要发送时都要调用一个函数。

客户功能:

int client()
{
    // Initialize Winsock.
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != NO_ERROR) {
        MessageBox(NULL, TEXT("Winsock initialization, done unsuccessfully"), TEXT("Diploma   thesis"), MB_ICONERROR | MB_OK);
        return 1;
    }

    // Create a socket for connecting to server.
    SOCKET ConnectSocket;
    ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ConnectSocket == INVALID_SOCKET) {
        MessageBox(NULL, TEXT("Socket creation for connecting to server, done    unsuccessfully"), TEXT("Diploma thesis"), MB_ICONERROR | MB_OK);
        WSACleanup();
        return 1;
    }

    // The sockaddr_in structure specifies the address family,
    // IP address, and port of the server to be connected to.
    sockaddr_in Service;
    memset(&Service, 0, sizeof(Service));
    Service.sin_family = AF_INET;
    Service.sin_addr.s_addr = inet_addr("127.0.0.1");
    Service.sin_port = htons(5004);

    // Connect to server.
    iResult = connect(ConnectSocket, (SOCKADDR *) &Service, sizeof (Service));
    if (iResult == SOCKET_ERROR) {
        iResult = closesocket(ConnectSocket);
        MessageBox(NULL, TEXT("Connection with server, done unsuccessfully"), TEXT("Diploma thesis"), MB_ICONERROR | MB_OK);
        WSACleanup();
        return 1;
    }

您已经注意到,客户端代码段不包含send函数。 正如我所说,这是因为我并不总是发送相同的char变量。 根据所按下的按钮,有不同的字符要发送。 例如:

代码段(发送Δ和O按钮):

client();
if (send(ConnectSocket, c_szText1, sizeof(c_szText1), 0) == SOCKET_ERROR)
    {MessageBox(NULL, TEXT("The message could not be sent"), TEXT("Diploma thesis"), MB_ICONERROR | MB_OK);}
}
client();
if (send(ConnectSocket, c_szText2, sizeof(c_szText2), 0) == SOCKET_ERROR)
    {MessageBox(NULL, TEXT("The message could not be sent"), TEXT("Diploma thesis"), MB_ICONERROR | MB_OK);}
    }

但是,发送功能失败,出现SOCKET_ERROR。 为什么会这样呢? 任何帮助,将不胜感激。

很难从您的代码中看出来,但似乎int client()应该是对服务器的某种连接初始化函数,然后调用send ,但是您的SOCKET ConnectSocket; client()是本地的...您是否也有套接字句柄的全局声明? 也许您是要从client()返回ConnectSocket吗? 另外,我强烈建议您不要按按钮进行连接。 我建议使用一个持久连接,即连接一次,然后在需要时发送。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM