在学习客户端与服务端的网络通信时遇到一个疑问。
客户端的connect()函数的第二个参数 const struct sockaddr *addr ,里面有服务端的ip和端口号,
但是没有子网掩码,(不同的局域网下ip是可以一样的),那凭什么有ip就能找到服务端呢?
struct sockaddr_in serv;
serv.sin_family = AF_INET;
serv.sin_port = htons(8888);
inet_pton(AF_INET, "127.0.0.1", &serv.sin_addr.s_addr);
int ret = connect(cfd, (struct sockaddr *)&serv, sizeof(serv));
是不是 AF_INET所对应的Ipv4协议里面有所规定,让客户端可以找到服务端?
又或者是connect()函数的底层进行了什么操作?
ip地址类似于服务器在网络上的身份证号码,知道ip就能对应到一台服务器。其次,服务器上有多个端口,每个应用程序使用的端口不一样,知道端口就可以和服务器上指定的应用交互数据。所以只需要知道ip和端口就行。
或者举个更通俗的例子,假如我要和你沟通,那我就需要知道你的csdn账号名称,才能找到你的主页,然后在你的主页上要找到和你聊天的那个图标点进去才能和你聊天,这里的csdn账号相当于就是ip的功能,那个聊天入口的图标相当于就是端口。所以知道ip和端口就能找到服务器上的那个应用并进行通信,至于如何找,找的过程由网络上的交换机,路由器和dns域名解析器去做就行。
望采纳!!!