参见http://blog.chinaunix.net/uid-23193900-id-3199173.html

无连接的socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。使用bind函数时,通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的端口来使用。
Bind()函数在成功被调用时返回0;出现错误时返回"-1"并将errno置为相应的错误号。需要注意的是,在调用bind函数时一般不要将端口号置为小于1024的值,因为1到1024是保留端口号,你可以选择大于1024中的任何一个没有被占用的端口号。
 有连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息,无须调用bind(),因为这种情况下只需知道目的机器的IP地址,而客户通过哪个端口与服务器建立连接并不需要关心,socket执行体为你的程序自动选择一个未被占用的端口,并通知你的程序数据什么时候打开端口。(当然也有特殊情况,linux系统中rlogin命令应当调用bind函数绑定一个未用的保留端口号,还有当客户端需要用指定的网络设备接口和端口号进行通信等等)

总之:
1.需要在建连前就知道端口的话,需要 bind 
2.需要通过指定的端口来通讯的话,需要 bind
具体到上面那两个程序,本来用的是TCP,客户端就不用绑定端口了,绑定之后只能运行一个client的程序属于自己人为设定的障碍,而从服务器那边得到的客户机连接端口号(是系统自动分配的)与这边客户机绑定的端口号根本是不相关的,所以客户端绑定也就失去了意义。

首先,服务器和客户端都可以bind,bind并不是服务器的专利。

客户端进程bind端口:  由进程选择一个端口去连服务器,(如果默认情况下,调用bind函数时,内核指定的端口是同一个,那么调用多个调用了bind()的client程序,会出现端口被占用的错误)注意这里的端口是客户端的端口。如果不分配就表示交给内核去选择一个可用端口。

客户端进程bind IP地址:相当于为发送出去的IP数据报分配了源IP地址,但交给进程分配IP地址的时候(就是这样写明了bind IP地址的时候)这个IP地址必须是主机的一个接口,不能分配一个不存在的IP。如果不分配就表示由内核根据所用的输出接口来选择源IP地址。

一般情况下客户端是不用调用bind函数的,一切都交给内核搞定,YES!

服务端进程bind端口:基本是必须要做的事情,比如一个服务器启动时(比如freebsd),它会一个一个的捆绑众所周知的端口来提供服务,同样,如果bind了一个端口就表示我这个服务器会在这个端口提供一些“特殊服务”。

服务端进程bind IP地址:目的是限制了服务端进程创建的socket只接受那些目的地为此IP地址的客户链接,一般一个服务器程序里都有

servaddr.sin_addr.s_addr = htonl(INADDR_ANY); // 只是针对IP4,IP6代码不太一样

这样一句话,意思就是:我不指定客户端的IP,随便连,来者不拒!总之只要你bind时候没有指定哪一项(置为0),内核会帮你选择。

关于Socket通信客户端是否需要绑定端口号相关推荐

  1. 安卓应用开发Socket通信 客户端+服务器端

    安卓应用开发Socket通信 客户端+服务器端 1. 添加网络权限 <uses-permission android:name="android.permission.INTERNET ...

  2. java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信

    Socket编程之简单客户端与服务器端通信 socket 通常用来实现客户端和服务端的连接,socket 是Tcp/Ip协议的一个十分流行的编程界面,一个socket 由一个Ip地址和一个端口号唯一确 ...

  3. Java中Socket通信-客户端与服务端相互传输对象数据

    场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...

  4. Java中Socket通信-客户端向服务端发送照片

    场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...

  5. Socket通信 客户端加密数据,传递数据密文到服务端,服务端解密密文 输出明文

    server // sdf_cpp_warpper.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // server端#ifndef UNICODE # ...

  6. C++ socket 通信客户端和服务器端

                 #include <iostream> #include <stdio.h> #include <windows.h> //一定要包含 ...

  7. Socket通信客户端报错Connection reset

    Socket服务端启动不报错,在启动客户端后控制台出现如下问题 [ Exception in thread "main" java.net.SocketException: Con ...

  8. socket如连接linux上的端口号_Linux| |对于UDP的学习

    UDP # 前序 UDP(用户数据报协议)没有连接的,是面向数据报的,是不可靠 # 套接字 就是IP地址+端口号 IP地址:4字节 端口号:2字节,也就是说范围是0~65536 端口号分为 知名端口号 ...

  9. 华为交换机eth口作用_华为交换机口如何绑定端口号

    华为交换机mac地址绑定怎么弄 1.进入端口视图,打开绑定功能2.全局视图,进行绑定 例:interface gigabitethernet0/0/1 ip source check user-bin ...

最新文章

  1. zg手册 之 python2.7.7源码分析(1)-- python中的对象
  2. 【云炬大学生创业基础笔记】第1章第3节 什么是创业的讨论
  3. oracle临时表经常被锁_【赵强老师】Oracle数据库的存储结构
  4. Web前端期末大作业--响应式健身会所网页设计(HTML+CSS+JS)实现
  5. ASP.NET验证控件祥解
  6. STM32编程中枚举和结构体的结合
  7. (转)Arcgis for JS之对象捕捉
  8. mysql 存储过程
  9. Windows系统安装ActiveMQ
  10. oracle的事物起始于,oracle 学习笔记(十) 事务控制语句
  11. 第二季-专题5-核心初始化
  12. IT程序员编程工具利器-辅助编程神器
  13. 中国羽绒服市场深度调查研究报告
  14. 澳洲7人自驾选什么车_自驾车在哪里
  15. Excel IF+COUNTIF、IFERROR+VLOOKUP使用组合公式
  16. 我和8个程序员聊了一下午,攒齐这些了观点...
  17. 抗体链接InP/ZnS量子点|量子点InP/ZnS表面修饰抗体偶联服务-齐岳生物
  18. pytorch安装到一半中断_AMD平台上配置PyTorch+Apex开发环境
  19. 笔记本电脑外放没声音,或外放有声音/插耳机没声音———Realtek High Definition Audio Driver安装
  20. 2021阳城一中高考成绩查询入口,2019阳城一中录取分数线(附2019高考成绩喜报)...

热门文章

  1. 2021年大数据Spark(二十三):SparkSQL 概述
  2. pip install scipy和matplotlib报错的问题详解:(pip install其它时报错通用)
  3. 【第八篇】SAP ABAP7.5x新语法之F4增强【续】
  4. commander.js
  5. 决策树模型与学习《一》
  6. 2022-2028年中国即时通讯市场投资分析及前景预测报告
  7. libopencv_core.so.2.4: cannot open shared object file: Depends: libopencv-photo2.4v5
  8. 201621123030《Java程序设计》第4周学习总结
  9. 最全正則表達式汇总—想要的都有了
  10. object-c中管理文件和目录:NSFileManager使用方法