2013-03-10 68 views
1

我有一個C/C++ TCP客戶端在OpenSUSE中工作,但不在Debian中。 我正在使用nc -l 4242作爲服務器。 然後我在Debian系統(Sid)上連接./my_client 127.0.0.1 4242,使用連接功能時它會失敗。在openSUSE中工作的套接字在Debian中無法工作?

您是否可以確認您是否使用Debian或其他操作系統也有相同的錯誤? 問題從哪裏來?

下面的代碼:

#include <sys/types.h> 
#include <sys/socket.h> 
#include <arpa/inet.h> 
#include <netdb.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <string.h> 
#include <iostream> 

void do_server(int s) 
{ 
    write(s, "client connected\n", strlen("client connected\n")); 
    close(s); 
} 

int main(int ac, char **av) 
{ 
    struct protoent *pe; 
    struct sockaddr_in sin; 
    int s; 

    if (ac != 3) 
    { 
     std::cerr << "Usage: ./client ip port" << std::endl; 
     return EXIT_FAILURE; 
    } 
    pe = getprotobyname("TCP"); 
    if ((s = socket(AF_INET, SOCK_STREAM, pe->p_proto)) == -1) 
    { 
     std::cerr << "Error: socket" << std::endl; 
     return EXIT_FAILURE; 
    } 
    sin.sin_family = AF_INET; 
    sin.sin_port = htons(atoi(av[2])); 
    sin.sin_addr.s_addr = inet_addr(av[1]); 
    if (connect(s, (const struct sockaddr *)&sin, sizeof(sin)) == -1) 
    { 
     std::cerr << "Error: connect" << std::endl; 
     close(s); 
     return EXIT_FAILURE; 
    } 
    std::cout << "client started" << std::endl; 
    do_server(s); 
    return EXIT_SUCCESS; 
} 
+2

那麼,會發生什麼? – 2013-03-10 02:25:39

+1

它在我的系統上運行sid。 – qqx 2013-03-10 02:39:56

+0

@SamuelEdwinWard它將打印「錯誤:連接」,因爲連接功能將失敗。 – baptx 2013-03-10 02:46:34

回答

4

這似乎與您所選擇的netcat的味道做。

隨着「傳統」的netcat(/etc/alternatives/nc鏈接/bin/nc.traditional),你必須使用此語法指定監聽端口:

nc -l -p 4242 

的「OpenBSD的netcat的也支持這個語法(還有一個你用過),即使它是手冊頁說你不能一起使用-l-p

+0

謝謝,這是解決方案!你知道我必須改變才能使用nc和-l選項嗎? – baptx 2013-03-10 03:29:19

+0

@baptx問那個話題的另一個問題 – 2013-03-10 03:34:35

+0

@SamMiller真的有必要嗎?它仍然與我使用nc -l port_number的原始問題有關。 – baptx 2013-03-10 03:40:02

相關問題