为什么TCP服务端需要调用bind函数而客户端通常不需要?


在cmd中查看连接情况, 结果如下:

C:\Documents and Settings\Administrator>netstat -nao | findstr 8888  TCP
0.0.0.0:8888           0.0.0.0:0              LISTENING       11256  TCP 
127.0.0.1:2964         127.0.0.1:8888         ESTABLISHED     13688  TCP
127.0.0.1:8888         127.0.0.1:2964         ESTABLISHED     11256

可以看到, 客户端的端口号是2964. 实际上, 这个端口号是操作系统随机分配的, 在分配的时候, 操作系统会保证不与现有的端口冲突。 好, 关掉这两个进程。 我们再重启服务端, 然后再重启客户端, 建立新的tcp连接, 我们再在cmd中查一次, 结果 我们发现, 客户端的端口编程了3156, 和上次的 2964不一致, 这就印证了操作系统会随机分配客户端端口这个说法。

那强行bind可不可行呢?

  • 如果你够无聊, 那也可以用一下bind. 在这里, 我要说一下了: 客户端用bind的程序很容易出问题, 你想想啊, 操作系统指定的不会冲突的随机端口难道不比你自己指定的容易冲突的固定端口好?

你可能感兴趣的:(为什么TCP服务端需要调用bind函数而客户端通常不需要?)