C语言的Socket编程基础问题
问一个比较基础的问题,感觉不是太明白。
就是Socket编程的服务器端为什么只要监听端口就可以了,难道服务器端知道从该端口发出的连接就是请求该服务器的吗?而且服务器端的端口绑定如果这样写: struct sockaddr_in myaddr
my_addr.sin_port = 0; 系统会随机选择一个未被使用的端口号,此时服务器端和客户端就难以做到设置的端口保持一致,这时怎么通信呢?
请大侠指点!
那如果客户端使用了随机的端口,服务器端绑定端口的时候,也不知道该绑定哪个了吧?
一个端口誉岁圆只能被一项服务使用,如果另外开一个服务器使用相同的端口,原先的服务就收不到任何数据,都被后一个收到了,一般不允许这么做的。
客户端连接服务端只需知道端口和ip,如果服务端的端口为随机,必须另外连接告知客户端端口,客户庆塌端才能连接服务器。
客雀祥户端使用随机的端口跟服务器端没关系:
比如服务器ip为111.111.111.111,监听的端口为20,
一个客户端ip为222.222.222.222,使用端口13452,
另一个客户端ip为222.222.222.200,使用端口24351,
客户端连接服务器的方法统一为connect("111.111.111.111",20)
也就是说客户端和服务端ip不需要一致,
一个端口只对应一项服务,所以只需要知道端口。
端口就是负责监听连接请求的.如果监听到该端口的请求那么就可以确定是对你这个服务器的请求.一旦这个端口被占用,那么其它任何程序都无法再使用这个端口.所以我们要避开系统常用端口,要从1024以上的端口选择.
在服务器端 sin_port 是芦野不可以被设置为0的, 否绝散则客户端的确无法连陪宏喊接. 而客户端可以设置为0,客户端可以任意端口的,没有影响.