网络-一个进程是否能拥有多个端口

感兴趣可以加QQ群85486140,大家一起交流相互学习下!

1.端口理解

  • 其它网友的观点
    博文1:https://segmentfault.com/q/1010000015610487
    博文中打的比喻个人觉得很形象,特此引用一下。
    在这里插入图片描述
    博文2:https://bbs.csdn.net/topics/392270274?page=1
    其它网友也有相同的问题,大部分人认为一个进程可以拥有多个端口。

  • 端口
    下面是引用别人博客的话,同样觉得挺形象。socket对象通过IP地址+端口唯一确定。所以socket一端往发数据最终都会保存到接受端的端口处,很形象。

端口其实就是队,操作系统为各个进程分配了不同的队,数据包按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己的队的大小。

2.编程验证

实践证明一个进程可以拥有多个端口

  • 实现步骤
    进程中重新创建一个线程,并分别在主线程和新创建的线程中创建一个socket对象,并绑定不同的端口。然后服务端连接不同的服务。即可实现一个进程拥有多个端口通信的例子。具体例子代码可以从 这里下载
//server端代码片段
        SOCKET sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (INVALID_SOCKET == sServer) {
                WSACleanup();
                return FALSE;
        }
        //3 准备通信地址  
        SOCKADDR_IN addrServer;
        addrServer.sin_family = AF_INET;
        addrServer.sin_port = htons(THREAD1_PORT); //这里主线程使用时另外一个端口号。
        addrServer.sin_addr.s_addr = INADDR_ANY;//任意可用地址  
        //4 绑定地址与socket(bind)  
        if (SOCKET_ERROR == bind(sServer, (const sockaddr*)&addrServer, sizeof(SOCKADDR_IN))) {
                closesocket(sServer);
                WSACleanup();
                return FALSE;
        }
  • 运行效果:
    结果同预期一样。
    在这里插入图片描述
  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值