在上篇文章中,僅僅講述瞭如何進行了TCP編程,在本章中,將講述使用udp進行編碼,先看以下的代碼,服務器端:python
root@python 513]# cat serverudp.py #!/usr/bin/env python from socket import * HOST = '192.168.1.60' PORT = 9999 s = socket(AF_INET,SOCK_DGRAM) s.bind((HOST,PORT)) print '...waiting for message..' while True: data,address = s.recvfrom(1024) print data,address s.sendto('this is the UDP server',address) s.close()在上述的代碼中,只要收到了客戶端的請求,那麼就會返回固定的話,在建立的時候,只要使用SOCK_DGRAM便可建立udp的鏈接,在設置的時候,只要綁定地址和端口便可。
客戶端代碼以下:編程
#!/usr/bin/env python from socket import * HOST='192.168.1.60' PORT=9999 s = socket(AF_INET,SOCK_DGRAM) s.connect((HOST,PORT)) while True: message = raw_input('send message:>>') s.sendall(message) data = s.recv(1024) print data s.close()
具體的tcp和udp的對好比下:安全
一、 tcp是面向鏈接的,而udp是無鏈接,在服務器端的反應就是,tcp須要作不少的設置工做,例如要進行監聽listen,而後監聽以後,進行接收客戶端的鏈接,也就是accept,當接收到鏈接以後,傳遞過來的是客戶端的socket對象,而後利用這個socket對象進行發送接收消息。而在udp中,不須要設置這些,只要綁定了地址和端口便可,在接收數據以後,獲得客戶端的地址和端口,而後服務器端的udp對象將信息發送到對應的地址。服務器
二、在傳輸數據的方面,tcp是安全的,會將大量的數據進行分塊而後進行發送,不會形成數據丟失;而在udp中,發送多少,接收多少就是多少,不會講數據進行分塊,是將數據做爲一個包發送,至於客戶端能接收到多少數據是無論的網絡
三、tcp在這個時候是阻塞鏈接的,也就是同時只有一個進行鏈接,而在udp中,能夠進行不少鏈接,主要就是根據地址來進行返回相關的信息socket
socket簡介:tcp
套接字的主要設計目標是爲了進程間的通訊,從而就有了地址家族的AF_UNIX,是基於文件型的通訊,也稱之爲IPC,inter process cominication,其實到後來,愈來愈多用到的是基於網絡的套接字,從而就有了地址家族的AF_INET。this
而在其中的協議分之爲tcp和udp,在tcp中稱之爲流,也就是SOCK_STREAM,在udp中稱之爲數據報,也就是SOCK_DGRAM,其實也就是datagram。編碼
一些方法的介紹:spa
一、 服務端方法
s.bind|() 進行綁定地址和端口
s.listen() 進行監聽
s.accept() 監聽--返回鏈接的socket對象和鏈接的客戶端地址
二、 客戶端方法
s.connet((address.port))
三、發送數據方法
s.send(string) 主要用在tcp
s.sendall(string) 主要用在tcp
s.sendto(string,address)主要用在udp根據地址發送
四、接收數據方法
s.recv(1024) 主要用在tcp表示接收到1024個字節的數據
s.recvfrom(1024) 主要用在udp,獲得參數爲數據和地址,從而能夠根據地址返回消息
在接收數據的時候,1024稱之爲緩衝區的數據,然而暫時並不懂啥是緩衝區,暫時保留此問題