2012-09-27 68 views
1

這是我的第一個linux socket程序。我正在使用服務器客戶端模型。我讀過教程並創建了服務器和客戶端。但是我的服務器端代碼有問題。cpp Linux socket編程錯誤,接受

我在accept line「無效轉換爲'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; 
} 

回答

2

更換

int size = sizeof(client_addr); 

socklen_t size = sizeof(client_addr); 
0

也許你應該聲明大小

socklen_t size; 
+0

啊哈,即固定它的感謝! – user1601045