博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
什么是socket的name? 怎样给socket取一个name? --- 以生宝宝并取名的过程再谈socket、name、bind和socket name
阅读量:4140 次
发布时间:2019-05-25

本文共 2003 字,大约阅读时间需要 6 分钟。

       在网路编程中, 我们经常听说到socket,  今天, 我们来详细了解一下socket的name.  一个socket name有三要素, 以WinSock为例, 它是在结构体SOCKADDR_IN中定义的, 三要素就是: 协议, ip,   port.   

 

       下面, 我们以生宝宝并取名的过程来叙述。对应关系为大笑

       socket ------ 宝宝

       name ------  名字

       bind ----- 给宝宝命名

       socket name(也可以说是socket地址吧) ------ 宝宝的名字

 

       好, 该看程序了(如下程序是对tcp服务端程序的裁剪):

 

#include 
#include
#pragma comment(lib, "ws2_32.lib")/**************************************************************** socket ------ 宝宝 name ------ 名字 bind ----- 给宝宝命名 socket name(也可以说是socket地址吧) ------ 宝宝的名字****************************************************************/int main(){ // 网络初始化 (生孩子前做准备工作) WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(1, 1); WSAStartup( wVersionRequested, &wsaData); // 创建socket, 此时socket没name (生了一个孩子, 但是还买来得及给孩子命名) SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0); // 查看socket name (亲朋好友来问孩子叫什么名字, 最终发现还没取名, 所以只能叫通用的"宝宝": {0, 0.0.0.0, 0} ) { SOCKADDR_IN addrMy; memset(&addrMy, 0, sizeof(addrMy)); int len = sizeof(addrMy); getsockname(sockSrv, (sockaddr*)&addrMy, &len); printf("%d\n", addrMy.sin_family); // 0 printf("%s\n", inet_ntoa(addrMy.sin_addr)); // 0.0.0.0 printf("%d\n", ntohs(addrMy.sin_port)); // 0 } // 定义一个name, 也可以说是地址 (费劲心思, 想到一个可以给宝宝的名字: {AF_INET, 192.168.1.100, 8888} ) SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_addr.S_un.S_addr = inet_addr("192.168.1.100"); addrSrv.sin_port = htons(8888); // 将socket与定义的name绑定起来 (正式为宝宝取一个刚才费劲心思想好的名字) bind(sockSrv,(SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); // 再次查看socket的name (亲朋好友再次来关心地问宝宝叫什么名字, 并从此将宝宝与这个名字挂钩了) { SOCKADDR_IN addrMy; memset(&addrMy, 0, sizeof(addrMy)); int len = sizeof(addrMy); getsockname(sockSrv, (sockaddr*)&addrMy, &len); printf("%d\n", addrMy.sin_family); // 2 printf("%s\n", inet_ntoa(addrMy.sin_addr)); // 192.168.1.100 printf("%d\n", ntohs(addrMy.sin_port)); // 8888 } // 后续过程我就不说了 // ...... return 0;}

      结果为:

 

0

0.0.0.0
0
2
192.168.1.100
8888

 

     好了, 通过本文, 我们更加清楚了socket, name, bind, socket name(socket address) 这些基本的概念了。 

 

 

 

转载地址:http://cugvi.baihongyu.com/

你可能感兴趣的文章
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
异常 Java学习Day_15
查看>>
Mysql初始化的命令
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>