【发布时间】:2011-06-30 19:20:45
【问题描述】:
有一个称为socket(); 的系统调用,它在侦听服务器上创建一个套接字。
我想了解的是服务器创建了 IP+端口组合。
假设 telnet 使用端口 23。
现在,当客户端机器进行连接时,服务器正在侦听的端口然后连接不在端口 23 上,实际上它在不同的端口上。我的困惑是
在服务器端也会发生同样的事情。
例如,我编写了一个服务器来监听端口 23,然后将在服务器端与不同客户端完成的连接它们如何区分,因为它们都将在同一个端口上。那么你怎么能在同一台服务器上建立这么多连接端口。如果有人使用
telnet (23) 或 ftp (21) 或 ssh (22) 那么许多人仍然可以登录到服务器上的同一个服务端口,即不同用户的多个 ssh 连接,而 ssh 仅在端口 22 上侦听。那又如何套接字究竟是做什么的或如何创建套接字的?
更新
我得到了解释。取决于来自客户端机器的 IP + 端口组合,连接发起的服务器端可以处理其余的事情,我认为这些信息可能被套接字文件描述符使用。我看到的是connect() 系统调用,我们使用如下
connect(sockfd,(struct sockaddr *)&client_address,size_t);
我们确实在客户端传递了struct sockaddr *,它具有唯一的 IP + 端口组合,我认为当服务器接受它时,事情就会继续进行。
我想进一步了解的是服务器端的论点
accept(server_sockfd,(struct sockaddr *)&client_address,(size_t *)sizeof (struct sockaddr ));
它是否获得与从客户端使用 connect() 传递的相同的 client_address 系统调用?如果是,那么同一个服务器监听多个客户端的socket_descriptors是不同的。我想知道的是,当它接受来自客户端的请求时,服务器端的数据结构是如何维护的。
【问题讨论】:
标签: c sockets network-programming