今天看了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()