Bsd套接字如何找到连接的服务器端口号?

时间:2016-05-22 02:48:32

标签: c sockets client-server

我有一台服务器:

  

./ server portNumber

我有一个客户:

  

./ client serverIpAddress

我在客户端只有服务器IP地址。我想连接到服务器套接字。但每次服务器端口号都不同。如何在客户端中使用BSD Socket连接到服务器套接字?这不可能吗?我必须知道服务器端口号吗?

简单用法BSD套接字:

    int socket_desc;
    struct sockaddr_in server;

    //Create socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }

    server.sin_addr.s_addr = inet_addr(ipAddress);
    server.sin_family = AF_INET;
    server.sin_port = htons( ThisIsServerPortNumber );

    //Connect to remote server
    if (connect(socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0)
    {
        puts("connect error");
        return 1;
    }

3 个答案:

答案 0 :(得分:1)

在49152和65535之间选择一个port number进行开发。如果您的想法成功,您将需要注册1024和49151之间的端口号。从0到1023的端口号是众所周知的端口,例如端口80用于HTTP服务器。

TCP Port Service Multiplexer协议旨在允许发现TCP服务器的端口号,但由于安全问题,它很少使用。

答案 1 :(得分:0)

bind(2)系统调用用于选择服务器中的端口号。必须在listen(2)系统调用之前和socket(2)调用之后调用它。

它允许不仅指定服务器将侦听连接的端口号,而且还指定ip地址,以防主机有多个接口并且您只想接受一个连接接口。

答案 2 :(得分:0)

  

但每次服务器端口号都不同。我该如何连接   客户端中带有BSD Socket的服务器套接字? ......我必须知道吗   服务器端口号?

是的,你必须知道它。想一想:服务器主机上可以运行许多不同的服务器程序,绑定到许多不同的端口。客户端计算机无法直接了解服务器主机以查看所需服务器程序绑定到哪个端口。因此,通常在服务器和客户端中使用预先分配的端口号。