2013-03-10 50 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

相关问题