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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值