UDP服務器和客戶端程序實例

出自《Python核心編程》

UDP不同於TCP:由於是無連接的,所有服務器不需要listen(夏娃不聽對面亞當的呼喊)

所以也不會用accept()返回客戶端連接給下屬去處理

創建一個UDP服務器

#-*- coding:utf-8 -*-

from socket import *
from time import ctime

HOST = 'localhost'
PORT = 20000
ADDR = (HOST, PORT)
BUFSIZ = 1024

udpSerSock = socket(AF_INET, SOCK_DGRAM)
udpSerSock.bind(ADDR)

while True:
    data, addr = udpSerSock.recvfrom(BUFSIZ)
    if not data:
        break 
    udpSerSock.sendto("[%s]%s" % (ctime(), data), addr)      #注意,因爲沒建立連接,因此sendto()裏都要有addr參數,下面的客戶端同樣要加addr

創建一個UDP客戶端

#-*- coding:utf-8 -*-

from socket import *

HOST = 'localhost'
PORT = 20000
ADDR = (HOST, PORT)
BUFSIZ = 1024

udpCliSock = socket(AF_INET, SOCK_DGRAM)

while True:
    data = raw_input('>>>')
    if not data:
        break
    udpCliSock.sendto(data, ADDR)   #不連接,直接將data朝ADDR扔過去
    data = udpCliSock.recvfrom(BUFSIZ)
    if not data:
        break
    print data
udpCliSock.close()

注意點:

  1. UDP是無連接的,因此不listen(),不accept()
  2. recvfrom(), sendto(data, addr)。 sendto()裏第二個參數爲addr
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章