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.

  • 相关阅读:
    P1440 求m区间内的最小值
    P1569 Generic Cow Protests
    P3252 [JLOI2012]树
    P3009 [USACO11JAN]Profits S
    <二分查找+双指针+前缀和>解决子数组和排序后的区间和
    常见算法技巧之——双指针思想
    设计模式——单例模式
    操作系统实验——读者写者模型(写优先)
    操作系统——内存管理学习笔记
    Altium Designer 16下载与安装教程
  • 原文地址:https://www.cnblogs.com/vipitsoft/p/5646865.html
Copyright © 2011-2022 走看看