【问题标题】:cpp Linux socket programming error with acceptcpp Linux套接字编程错误接受
【发布时间】:2012-09-27 14:39:41
【问题描述】:

这是我的第一个 linux 套接字程序。我正在使用服务器客户端模型。我已阅读教程并创建了服务器和客户端。但是我遇到了服务器端代码的问题。

我在接受行收到此错误消息“'int*' 到 'socklen_t* {aka unsigned int*}' 的无效转换”。
我该如何解决这个问题?下面是服务器代码。

#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>

using namespace std;
#define MAX_SIZE 50

int main()
{
    int sock_descriptor, conn_desc;
    struct sockaddr_in serv_addr, client_addr;
    char buff[MAX_SIZE];
    sock_descriptor = socket(AF_INET, SOCK_STREAM, 0);
    if(sock_descriptor < 0)
        cout << "Failed creating socket" << endl;
    bzero((char *)&serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(1234);

    if(bind(sock_descriptor, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
        cout << "Failed to bind" << endl;

    listen(sock_descriptor, 5);
    cout << "Waiting for connection...\n" << endl;

    int size = sizeof(client_addr);
    conn_desc = accept(sock_descriptor, (struct sockaddr *)&client_addr, &size);
    if(conn_desc == -1)
        cout << "Failed accepting connection" << endl;
    else
        cout << "Connected" << endl;

    if(read(conn_desc, buff, sizeof(buff)-1) > 0)
        cout << "Received %s" << buff << endl;
    else
        cout << "Failed receiving" << endl;

    close(conn_desc);
    close(sock_descriptor);

    return 0;
}

【问题讨论】:

    标签: c++ linux sockets


    【解决方案1】:

    替换

    int size = sizeof(client_addr);
    

    socklen_t size = sizeof(client_addr);
    

    【讨论】:

      【解决方案2】:

      也许你应该将 size 声明为

      socklen_t size;
      

      【讨论】:

        猜你喜欢
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        • 2011-07-23
        • 2015-01-09
        • 2013-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多