zoukankan      html  css  js  c++  java
  • python网络编程【二】(使用UDP)

      UDP通信几乎不使用文件对象,因为他们往往不能为数据如何发送和接受提供足够的控制。下面是一个基本的UPD客户端:

      

     1 #!/usr/bin/env python
     2 import socket,sys
     3 
     4 host = sys.argv[1]
     5 textport = sys.argv[2]
     6 
     7 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     8 try:
     9     port = int(textport)
    10 except ValueError:
    11     port = socket.getservbyname(textport, 'udp')
    12 
    13 s.connect((host, port))
    14 print "Enter data to transmit:"
    15 data = sys.stdin.readline().strip()
    16 s.sendall(data)
    17 print "Looking for replies; press Ctrl-C or Ctrl-Break to stop."
    18 while 1:
    19     buf = s.recv(2048)
    20     if not len(buf):
    21         break
    22     sys.stdout.write(buf)

      这段程序发送一个udp信息包,接收一个udp信息包,并继续等候其他的(其他的永远也不会到达)。最后Ctrl-C来终止。

      让我们来看看它和TCP的区别:

        1.当socket被建立的时候,程序调用的是SOCK_DGRAM,而不是SOCK_STREAM,这会向操作系统表明socket将使用udp通信。

        2.对socket.getservbyname()的调用寻找的是UDP端口号,端口号对于协议是特殊的,即一个TCP使用119端口,一个完全不同的UDP程序也可以使用这个端口号。

        3.UDP程序无法探测到服务器什么时候发送完数据,因为其实这里没有实际的连接。对connect()的调用只是初始化一些内在的参数,同时,服务器也许不会返回任何数据,或者数据也许在传输过程中丢失,程序并没有只能判断这个问题。因此,当您结束等待传来的信息包时,您必须按下Ctrl-C.

  • 相关阅读:
    如何吸引小白用户爱上你的游戏?
    产品经理应聘之感受漫谈
    罗永浩Vs王自如:浮躁的世界该如何降温?!
    从锤子手机谈产品的逼格
    博客园与51CTO博客之产品用户体验分析
    web网站 Vs 移动App 谁更能打动你?之 产品经理篇
    不要只甘于做一个程序员
    我的程序员工作经历(二) 之 谈合作
    OpenCV 之 神经网络 (一)
    Qt 之 QtConcurrent
  • 原文地址:https://www.cnblogs.com/vipitsoft/p/5646865.html
Copyright © 2011-2022 走看看