1. 程式人生 > >python 之 socket 通訊

python 之 socket 通訊

今天看了python 核心程式設計的第二章,講了關於python  socket 模組的通訊, 記錄要點如下:
套接字: 1、AF_UNIX AF_INET 套接字地址:主機-埠對 面向連線的套接字:在通訊之前必須建立一個連線,比如使用電話給朋友打電話,實現這種連線型別的主要協議是傳輸控制協議(TCP)建立TCP套接字,必須使用SOCK_STREAM作為套接字的型別 無連線的套接字:無須建立連線,如同傳送郵政服務一樣,實現這種連線型別的主要協議是使用者資料報協議(UDP)建立UDP套接字,必須使用SOCK_DGRAM作為套接字的型別 這兩種套接字的比較:TCP可以確保資料的到達,將訊息按照順序組合在一起,最後將完整訊息傳遞給正在等待的應用程式;UDP則不一定能保證資料的到達,這些資料也沒有順序性,但是維護成本低廉,通常能夠提供更好的效能。 2、
2、建立TCP伺服器
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (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:', addr

	while True:
		data = tcpCliSock.recv(BUFSIZ)
		if not data:
			break
		tcpCliSock.send('[%s] %s' %(ctime(), data))
	tcpCliSock.close()
tcpSerSock.close()
3、建立TCP客戶端
from socket import *
from time import ctime

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

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
	data = raw_input('> ')
	if not data:
		break
	tcpCliSock.send(data)
	data = tcpCliSock.recv(BUFSIZ)
	if not data:
		break
	print data
tcpCliSock.close()
4、建立UDP伺服器
from socket import *
from time import ctime

HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (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:', addr
udpSerSock.close()

5、建立UDP客戶端
from socket import *

HOST = 'localhost'
PORT  = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
udpCliSock = socket(AF_INET, SOCK_DGRAM)

while True:
	data = raw_input('> ')
	if not data:
		break
	udpCliSock.sendto(data, ADDR)
	data, ADDR = udpCliSock.recvfrom(BUFSIZ)
	if not data:
		break
	print data
udpCliSock.close()