我的客户端服务器代码无法正常工作

用户名

我得到了客户端服务器程序的一些代码,并自行修改了代码。但是我无法找出为什么我的代码无法正常工作。编译很好,但是在客户端出现中止错误?我已经尝试了一下,对编程还是陌生的。因此,请查看下面的给客户端服务器代码并检查问题所在。

//Client side code 

#include <iostream>
#include <winsock2.h>
#include <vector>
#include <algorithm>
#include <ctime>
#include "client.h"
#pragma comment(lib, "Ws2_32.lib")

using namespace std;
tcp_client::tcp_client()
{}

tcp_client::~tcp_client()
{}
int tcp_client::start_listening()

{

    WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    SOCKET ConnectSocket;
    ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    if (ConnectSocket == INVALID_SOCKET)
    {
        cout<<"Client: Error at socket(): %ld.\n"<< WSAGetLastError();
        WSACleanup();
        return 0;
    }

    sockaddr_in clientService;
    clientService.sin_family = AF_INET;
    clientService.sin_addr.s_addr = inet_addr("127.0.0.1");
    clientService.sin_port = htons(55555);

    if (connect(ConnectSocket, (SOCKADDR*)&clientService, sizeof(clientService)) == SOCKET_ERROR)
    {
        cout<<"Client: Failed to connect\0";
        WSACleanup();
        return 0;
    }
    return 0;
}

int tcp_client::start_sending()
{

    int bytesSent;
    int bytesRecv = SOCKET_ERROR;

    std::vector<double> m_vector;
    uint32_t  nlength =0;
    std::vector<double> m_vector1(nlength/sizeof(double)); 


    for( int i = 0; i <100; i++)
    {    
        m_vector.push_back(i);
    }

    uint32_t siz = (m_vector.size())*sizeof(double);



    int total_bytes = 0;
    int count=0;


    for(int j=0; j<10; j++)
    {  

        bytesSent = send(ConnectSocket,(char*)&siz, 4, 0);
        assert (bytesSent == sizeof (uint32_t));
        std::cout<<"length information is in:"<<bytesSent<<"bytes"<<std::endl;

        bytesSent = send(ConnectSocket,(char*)m_vector.data(), siz, 0);
        total_bytes = total_bytes+bytesSent;

        std::cout<<"Client: Bytes sent:"<<total_bytes<<std::endl;
    }

    closesocket (ConnectSocket);
    return 0;
}


int main()
{

    std::clock_t c_start = std::clock();

    tcp_client a;
    a.start_listening();
    a.start_sending();

    std::clock_t c_end = std::clock();
    std::cout << "CPU time used: "<< 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC<< " ms\n";

    WSACleanup();
    system("pause");
    return 0;
}

// Customer.h

#include <string.h>
#include <winsock2.h>
class tcp_client
{

public:
    tcp_client();
    virtual ~tcp_client();
    int start_listening();
    int start_sending();

protected:

   SOCKET ConnectSocket; // client Socket
   };

//服务器代码

#include <iostream>
#include <winsock2.h>
#include <vector>
#include <algorithm>
#include <ctime>
#pragma comment(lib, "Ws2_32.lib")
#include "server.h"

using namespace std;
 tcp_server::tcp_server()
{}

tcp_server::~tcp_server()
{}

int tcp_server::start_listening()
{

    WORD wVersionRequested;
    WSADATA wsaData;
    int wsaerr;
    wVersionRequested = MAKEWORD(2, 2);
    wsaerr = WSAStartup(wVersionRequested, &wsaData);


    if (wsaerr != 0)
    {
        std::cout<<"server starting...."<<std::endl;
    }


    m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    if (m_socket == INVALID_SOCKET)
    {
        cout<<"Server: Error at socket(): "<<WSAGetLastError()<<std::endl;
        WSACleanup();
        return 0;
    }


    sockaddr_in service;
    service.sin_family = AF_INET;

    service.sin_addr.s_addr = inet_addr("127.0.0.1");
    service.sin_port = htons(55555);

    if (bind(m_socket, (SOCKADDR*)&service, sizeof(service)) == SOCKET_ERROR)
    {
        cout<<"Server: bind() failed:"<< WSAGetLastError();
        closesocket(m_socket);
        return 0;
    }


    if (listen(m_socket, 10) == SOCKET_ERROR)
    {
        cout<<"Server: listen(): Error listening on socket "<< WSAGetLastError()<<std::endl;
    }

    SOCKET AcceptSocket;

    while (1)
    {
        AcceptSocket = SOCKET_ERROR;
        while (AcceptSocket == SOCKET_ERROR)
        {
            AcceptSocket = accept(m_socket, NULL, NULL);
        }

        cout<<"Server: Client Connected"<<std::endl;
        m_socket = AcceptSocket;
        break;
    }

    return 0;
}

int tcp_server::start_receiving()
{

    int bytesSent;
    int bytesRecv;
    uint32_t  nlength =0;
    int total_br =0;
    std::vector<double> m_vector(nlength/sizeof(double));


    std::clock_t c_start=0;

    int count =0;

    while(1)
    {

        int length_received = recv(m_socket,(char*)&nlength, 4, 0); 
        m_vector.resize(nlength/sizeof(double));
        bytesRecv = recv(m_socket,(char*)m_vector.data(), nlength, 0);


        if(bytesRecv > 0)
        {
            total_br = total_br + bytesRecv;

            cout<<"Server: Received bytes are"<<total_br<<std::endl;
        }
            else
        {
            std::cout<<"Data Receiving has finished"<<std::endl;
            break;
        }

}
closesocket (m_socket);
WSACleanup();   
return total_br;
}

int main()

{
    std::clock_t c_start = std::clock();
    tcp_server a;
    a.start_listening();
    int byte= a.start_receiving();
    std::cout<<"total byte received are"<<byte;

    std::clock_t c_end = std::clock();
    std::cout << "CPU time used: "<< 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC<< " ms\n";
    system("pause");
    return 0;
}

//server.h

#include <string.h>
#include <winsock2.h>
class tcp_server
{

public:
    tcp_server();
    virtual ~tcp_server();
    int start_listening();
    int start_receiving();

protected:

   SOCKET m_socket; // Server Socket
    };
fly

删除client.cpp中的这一行,它将起作用:

SOCKET ConnectSocket;

我之前删除了此行后运行了代码,所以工作正常。

这行代码表示您ConnectSocket在函数范围内定义了局部变量start_listening()该局部变量遮盖了成员变量似乎您为成员变量分配了有效的文件描述符,但是成员变量ConnectSocket始终未初始化,因此send()失败。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我的服务器/客户端项目无法正常工作

来自分类Dev

Dart / Flutter WebSocket服务器/客户端在同一侧无法正常工作

来自分类Dev

如果我切换客户端/服务器角色,Synergy将无法正常工作(左边的作品,右边的作品不起作用)

来自分类Dev

Redis服务器启动失败,但是客户端可以正常工作

来自分类Dev

多线程服务器客户端代码

来自分类Dev

Signalr无法在控制器上正常工作,我认为它找不到客户端

来自分类Dev

为什么我的Boost http客户端无法连接到python http服务器?

来自分类Dev

当我的客户端连接时,简单的RPC服务器将无法应答

来自分类Dev

C ++服务器无法通过套接字从python客户端读取我的消息

来自分类Dev

不编写客户端主机就无法访问我的服务器

来自分类Dev

hazelcast客户端无法连接到服务器

来自分类Dev

OpenSSL:服务器无法验证客户端证书

来自分类Dev

服务器无法向客户端发送消息

来自分类Dev

无法将客户端服务器与Websockets连接

来自分类Dev

ldap客户端无法联系ldap服务器

来自分类Dev

客户端服务器无法通信

来自分类Dev

Java无法获得客户端或服务器响应

来自分类Dev

Python 服务器和客户端无法通信

来自分类Dev

Winsock 客户端和服务器无法连接

来自分类Dev

客户端无法获取服务器响应

来自分类Dev

Java UDP 客户端未从服务器接收(简单的客户端服务器 udp 代码)

来自分类Dev

哪些程序可以编译我的Java服务器代码,Android客户端代码和Asynctask代码?

来自分类Dev

Node.js-WebSocket节点模块:如何使多客户端套接字服务器正常工作?

来自分类Dev

表示http客户端连接到服务器,https客户端无法连接到服务器

来自分类Dev

客户端验证无法正常工作

来自分类Dev

Safari无法在服务器端的刷新/ onbeforeunload上运行回调函数(调用客户端代码)

来自分类Dev

有人可以解释为什么我的服务器/客户端无法以建立连接的方式工作吗?

来自分类Dev

客户端-服务器插座

来自分类Dev

测试客户端服务器

Related 相关文章

  1. 1

    我的服务器/客户端项目无法正常工作

  2. 2

    Dart / Flutter WebSocket服务器/客户端在同一侧无法正常工作

  3. 3

    如果我切换客户端/服务器角色,Synergy将无法正常工作(左边的作品,右边的作品不起作用)

  4. 4

    Redis服务器启动失败,但是客户端可以正常工作

  5. 5

    多线程服务器客户端代码

  6. 6

    Signalr无法在控制器上正常工作,我认为它找不到客户端

  7. 7

    为什么我的Boost http客户端无法连接到python http服务器?

  8. 8

    当我的客户端连接时,简单的RPC服务器将无法应答

  9. 9

    C ++服务器无法通过套接字从python客户端读取我的消息

  10. 10

    不编写客户端主机就无法访问我的服务器

  11. 11

    hazelcast客户端无法连接到服务器

  12. 12

    OpenSSL:服务器无法验证客户端证书

  13. 13

    服务器无法向客户端发送消息

  14. 14

    无法将客户端服务器与Websockets连接

  15. 15

    ldap客户端无法联系ldap服务器

  16. 16

    客户端服务器无法通信

  17. 17

    Java无法获得客户端或服务器响应

  18. 18

    Python 服务器和客户端无法通信

  19. 19

    Winsock 客户端和服务器无法连接

  20. 20

    客户端无法获取服务器响应

  21. 21

    Java UDP 客户端未从服务器接收(简单的客户端服务器 udp 代码)

  22. 22

    哪些程序可以编译我的Java服务器代码,Android客户端代码和Asynctask代码?

  23. 23

    Node.js-WebSocket节点模块:如何使多客户端套接字服务器正常工作?

  24. 24

    表示http客户端连接到服务器,https客户端无法连接到服务器

  25. 25

    客户端验证无法正常工作

  26. 26

    Safari无法在服务器端的刷新/ onbeforeunload上运行回调函数(调用客户端代码)

  27. 27

    有人可以解释为什么我的服务器/客户端无法以建立连接的方式工作吗?

  28. 28

    客户端-服务器插座

  29. 29

    测试客户端服务器

热门标签

归档