当前位置: 首页 > 知识库问答 >
问题:

Linux套接字只接收第一块数据

彭高畅
2023-03-14

我有两个程序,一个是服务器,一个只听,另一个是客户端。我发送100字节的数据,每个数据块64字节。我将获得64字节的第一块数据,但随后我的服务器退出,因为它无法获取其他数据。我的客户正在发送所有数据。

void ServerLinux::Receive(){

    int sock = 0;
    struct sockaddr_in server;
    char buffer[this->packageLength];

    if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
        this->Die("Failed to create socket");
    }

    memset(&server, 0, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = htonl(INADDR_ANY);
    server.sin_port = htons(this->port);

    if(bind(sock, (struct sockaddr *) &server, sizeof(server)) < 0){
        this->Die("Failed to bind the server socket");
    }
    if(listen(sock, 1) < 0){
        this->Die("Failed to listen on server socket");
    }

    int clientSocket = 0;
    struct sockaddr_in client;
    socklen_t size = sizeof(client);
    if((clientSocket = accept(sock, (struct sockaddr *) &client, &size)) < 0){
        this->Die("Failed to accept client");
    }

    int received = -1;

    //This is fine data is recived
    if((received = recv(clientSocket, buffer, this->packageLength,0)) < 0){
        this->Die("Failed to receive initial bytes from client");
    }
    std::cout << "Received!" << std::endl;

    //Data is not received in this while loop
    while(received > 0){
        if((received = recv(sock, buffer, this->packageLength,0)) < 0){
            this->Die("Failed to receive additional bytes frin client");
        }
        std::cout << "Received!" << std::endl;
    }
}

共有1个答案

栾景胜
2023-03-14

你为什么不对 recv 使用相同的参数

作品: recv(clientSocket, buffer, this-

recv(sock,buffer,this)不起作用-

将袜子更改为客户端套接字。

 类似资料:
  • socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!

  • 当我尝试接收大量数据时,它会被切断,我必须按enter键才能获取其余数据。起初,我可以增加一点,但它仍然不会收到所有的。正如您所看到的,我增加了conn.recv()上的缓冲区,但它仍然无法获取所有数据。它会在某一点切断它。我必须在原始输入上按enter键才能接收其余数据。我是否可以一次获取所有数据?这是密码。

  • 我使用Android应用程序通过TCP套接字与同一局域网上的PC java应用程序进行通信、发送和接收消息。下面是我在android中使用的Asynctask的代码,用于发送消息并从PC接收回复: } 我在onPostExcecute中的祝酒词中显示PC的回复。 Android通过BufferedWriter发送消息,而PC上的java应用程序在BufferedReader中接收消息。 PC在收到

  • 因此,我正在用Java编写一个程序,在DatagramSocket和DataGramPacket的帮助下发送和接收数据。问题是,当我发送数据/接收数据时,数据在我发送的程序中也会有所不同,但只是在某些情况下,比如: 但有时会起作用,比如:

  • 问题内容: 是否可以在IP协议下使用ICMP套接字?也许像: 我应该在 字段中输入什么?我看到了一些使用SOCK_RAW的示例,但是这是否会阻止OS处理IP协议呢? 还有一件事。由于该协议不涉及任何端口,操作系统如何知道他应该向哪个进程发送ICMP数据报? 问题答案: 是的,这是可能的,因为该命令执行ICMP。 要找出所涉及的系统调用,您可以使用该命令(在根目录下)。 您也可以浏览该命令的源代码,

  • 我最近开始学习php套接字。我想在服务器和客户端之间创建一个永久传输控制协议!但是我的PHP套接字客户端只发送和接收一条消息。我想无限期地发送和接收消息,通过一个连接。 服务器php: 客户php: