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()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章