今天看了python 核心編程的第二章,講了關於python socket 模組的通訊, 記錄要點如下:
通訊端: 1、AF_UNIX AF_INET 通訊端地址:主機-連接埠對 連線導向的通訊端:在通訊之前必須建立一個串連,比如使用電話給朋友打電話,實現這種連線類型的主要協議是傳輸控制通訊協定(TCP)建立TCP通訊端,必須使用SOCK_STREAM作為通訊端的類型 不需連線的通訊端:無須建立串連,如同發送郵政服務一樣,實現這種連線類型的主要協議是使用者資料包通訊協定(UDP)建立UDP通訊端,必須使用SOCK_DGRAM作為通訊端的類型 這兩種通訊端的比較:TCP可以確保資料的到達,將訊息按照順序組合在一起,最後將完整訊息傳遞給正在等待的應用程式;UDP則不一定能保證資料的到達,這些資料也沒有順序性,但是維護成本低廉,通常能夠提供更好的效能。 2、
2、建立TCP伺服器HOST = ''PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)tcpSerSock = socket(AF_INET, SOCK_STREAM)tcpSerSock.bind(ADDR)tcpSerSock.listen(5)while True:print 'waiting for connection ...'tcpCliSock, addr = tcpSerSock.accept()print '...connected from:', addrwhile True:data = tcpCliSock.recv(BUFSIZ)if not data:breaktcpCliSock.send('[%s] %s' %(ctime(), data))tcpCliSock.close()tcpSerSock.close()3、建立TCP用戶端from socket import *from time import ctimeHOST = 'localhost'PORT = 31567BUFSIZ = 1024ADDR = (HOST, PORT)tcpCliSock = socket(AF_INET, SOCK_STREAM)tcpCliSock.connect(ADDR)while True:data = raw_input('> ')if not data:breaktcpCliSock.send(data)data = tcpCliSock.recv(BUFSIZ)if not data:breakprint datatcpCliSock.close()4、建立UDP伺服器from socket import *from time import ctimeHOST = ''PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)udpSerSock = socket(AF_INET, SOCK_DGRAM)udpSerSock.bind(ADDR)while True:print 'waiting for message...'data, addr = udpSerSock.recvfrom(BUFSIZ)udpSerSock.sendto('[%s] %s' %(ctime(), data), addr)print '...recevied fro, and returned to:', addrudpSerSock.close()5、建立UDP用戶端from socket import *HOST = 'localhost'PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)udpCliSock = socket(AF_INET, SOCK_DGRAM)while True:data = raw_input('> ')if not data:breakudpCliSock.sendto(data, ADDR)data, ADDR = udpCliSock.recvfrom(BUFSIZ)if not data:breakprint dataudpCliSock.close()