python的socket編程之udp編程


在上篇文章中,僅僅講述了如何進行了TCP編程,在本章中,將講述使用udp進行編碼,先看如下的代碼,服務器端:

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的對比如下:

1、 tcp是面向連接的,而udp是無連接,在服務器端的反應就是,tcp需要做很多的設置工作,例如要進行監聽listen,然后監聽之后,進行接收客戶端的連接,也就是accept,當接收到連接之后,傳遞過來的是客戶端的socket對象,然后利用這個socket對象進行發送接收消息。而在udp中,不需要設置這些,只要綁定了地址和端口即可,在接收數據之后,得到客戶端的地址和端口,然后服務器端的udp對象將信息發送到對應的地址。

2、在傳輸數據的方面,tcp是安全的,會將大量的數據進行分塊然后進行發送,不會造成數據丟失;而在udp中,發送多少,接收多少就是多少,不會講數據進行分塊,是將數據作為一個包發送,至於客戶端能接收到多少數據是不管的

3、tcp在這個時候是阻塞連接的,也就是同時只有一個進行連接,而在udp中,可以進行很多連接,主要就是根據地址來進行返回相關的信息


socket簡介:

套接字的主要設計目標是為了進程間的通信,從而就有了地址家族的AF_UNIX,是基於文件型的通信,也稱之為IPC,inter process cominication,其實到后來,越來越多用到的是基於網絡的套接字,從而就有了地址家族的AF_INET。

而在其中的協議分之為tcp和udp,在tcp中稱之為流,也就是SOCK_STREAM,在udp中稱之為數據報,也就是SOCK_DGRAM,其實也就是datagram。


一些方法的介紹:

1、 服務端方法

s.bind|()   進行綁定地址和端口

s.listen()  進行監聽

s.accept() 監聽--返回連接的socket對象和連接的客戶端地址

2、 客戶端方法

s.connet((address.port))
3、發送數據方法

s.send(string) 主要用在tcp

s.sendall(string) 主要用在tcp

s.sendto(string,address)主要用在udp根據地址發送

4、接收數據方法

s.recv(1024) 主要用在tcp表示接收到1024個字節的數據

s.recvfrom(1024) 主要用在udp,得到參數為數據和地址,從而可以根據地址返回消息


在接收數據的時候,1024稱之為緩沖區的數據,然而暫時並不懂啥是緩沖區,暫時保留此問題



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM