UDP套接字编程

UDP Socket编程

UDP:在客户端和服务器之间没有连接

  • 没有握手【建立起socket之后,UDP Socket只是和本地的IP和端口相捆绑,不跟对方的IP和端口相捆绑】
  • 发送端在每一个报文中明确地址指定目标的IP地址和端口号【不然就不知道发给谁,因为没有握手】【发的时候要指明发送端的端节点,还要指明发送的东西,另外一方面还要指明发送给谁】
  • 服务器必须从收到的分组中提取出发送端的IP地址和端口号【任何一个守候在UDP端口之上的UDP进程,在收报文的时候要收对方发过来的是什么、对方的端节点,知道谁发给我的,转化完了之后我才知道要发给谁】【收的时候除了指明我从哪个socket去收,收的是什么,还要获取一个引用型的参数,知道谁发给我的】

UDP:传送的数据可能乱序,也可能丢失

进程视角看UDP服务——UDP为客户端和服务器提供不可靠的字节组的传送服务

【UDP是无连接的,所以提供的服务也叫数据报,IP也叫数据报(datagram),无连接的PDU通常可以把它叫数据报,所以看到datagram要结合上下文来看他是UDP的协议数据单元还是IP的协议数据单元】

Client/server socket 交互:UDP

【第一步(服务器端)建立一个serverSocket,返回一个整数】

【第二步(服务器端)bind,把返回的serverSocket的值和本地的sad(IP地址和端口号)相捆绑】

【第三步(服务器端)recvfrom,read from serverSocket,仍然是serverSocket,等待客户端向我发送什么东西。从serverSocket去读,读的东西放到Sen,谁发给我的(对方的IP地址和端口)作为一个引用型参数,相当于是一个返回值返回给服务端。如果对方发送东西,这个函数就会解除阻塞,如果没有就一直阻塞着】

【第四步,客户端clientSocket,在参数中指明是UDP socket】

【第五步,(客户端)有一个本地的bind(隐式的),把clientSocket和本地的端口值相捆绑】

【第六步,(客户端)sendto,在sendto当中指明要使用的端口、clientSocket值,要发的是什么】

【sendto发出去之后recvfrom解除阻塞,然后recvfrom返回一个有效值,在Sen放传过来的是什么,之后对他进行一个大小写转换】

【第七步,(服务端)sendto,serverSocket作为参数,谁发送给我的我发送给谁(&

cad)】

【第八步,(客户端)read,借助于clientSocket,就会得到来自服务器端已经转换完之后的大写字符串,再把它显示出来,再关掉,然后客户端再关闭socket】

【在UDP之上不需要握手,建立去socket值之后就发了,在服务器上没有welcomeSocket和connectionSocket之分,只有一个socket,代表的是本地的IP和相应的端口】

样例:C客户端(UDP)

样例:C服务器(UDP)

 参考资料:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 P21

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值