我只能收到一个字(winsock c ++ tcp / ip服务器和客户端)

时间:2019-07-07 02:47:55

标签: c++ networking winsock winsock2

我设法用c ++在Winsock中创建了一个TCP服务器和客户端,但是由于我不知道的原因,我一次不能发送多个单词。

亲眼看看:

snapshot

我指定我是一个绝对的初学者,并且我的代码可能包含错误,因此如果发现一些错误,请毫不犹豫地纠正我。 (英语也不是我的母语,所以很抱歉拼写错误。)

之所以寻求帮助,是因为我花了几个小时来寻找解决问题的方法,但没有找到解决方法。我想我错过了部分代码,但我不知道在哪里以及为什么。我查看了其他人创建的服务器和客户端源代码,但没有发现自己的区别。 (对不起,如果我犯了一个非常简单的错误)

client.cpp


    #define _WINSOCK_DEPRECATED_NO_WARNINGS
    #include <iostream>
    #include <WinSock2.h>
    #include <WS2tcpip.h>
    #include <string>
    #include <stdio.h>

    #pragma comment(lib, "ws2_32.lib")

    int main()
    {
        std::cout << "--- Chat Section ---" << std::endl;

        WSADATA wsa;
        WSAStartup(MAKEWORD(2, 2), &wsa);
        sockaddr_in dest;
        dest.sin_family = AF_INET;
        dest.sin_port = htons(8888);
        dest.sin_addr.s_addr = inet_addr("127.0.0.1");
        SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        connect(client, (sockaddr*)& dest, sizeof(dest));

        std::string ok;
        char buf[512];
        do
        {

            std::cin >> ok;
            if (ok.size() > 0)
            {
                send(client, ok.c_str(), ok.length(), 0);
                ZeroMemory(&buf, sizeof(buf));
                int okok = recv(client, buf, 512, 0);
                if (okok > 0)
                {
                    std::string str(buf);
                    std::cout <<">> "<< str << std::endl;
                    std::cout << std::endl;
                    // std::cout << std::string(buf, 0, okok) << std::endl;
                }
            }
        } while (true);

        system("pause");
        return 0;
    }

server.cpp

#include <iostream>
#include <WinSock2.h>
#include <WS2tcpip.h>

#pragma comment(lib, "Ws2_32.lib")

int main()
{
    std::cout << "Server tcp/ip test V.14.0" << std::endl;

    WSADATA wsa;
    WSAStartup(MAKEWORD(2, 2), &wsa);
    sockaddr_in server, client;

    SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons(8888);
    // bind
    bind(s, (sockaddr*)& server, sizeof(server));
    //listen
    listen(s, 3);
    //Accept
    sockaddr_in from; // for the client
    int fromlen = sizeof(from);
    SOCKET clientS = accept(s, (sockaddr*)& from, &fromlen);
    if (clientS == INVALID_SOCKET)
    {
        std::cout << "error with accept()" << std::endl;
    }


    char recvbuf[512];


    do
    {
        int iResult = recv(clientS, recvbuf, 512, 0);
        if (iResult > 0)
        {
            send(clientS, recvbuf, iResult, 0);
        }



    } while(true);



    system("pause");
    return 0;
}

0 个答案:

没有答案