Python在网络通讯方面功能强大,学习一下Socket通讯的基本方式
UDP通讯:
Server:
import socket port=8081 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #从指定的端口,从任何发送者,接收UDP数据 s.bind(('',port)) print('正在等待接入...') while True: #接收一个数据 data,addr=s.recvfrom(1024) print('Received:',data,'from',addr)
Client:
import socket port=8081 host='localhost' s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.sendto(b'hello,this is a test info !',(host,port))
很简单 。下面是TCP方式:
Server:
#-*- coding: utf-8 -*- from socket import * from time import ctime HOST='' PORT=12345 BUFSIZ=1024 ADDR=(HOST, PORT) sock=socket(AF_INET, SOCK_STREAM) sock.bind(ADDR) sock.listen(5) while True: print('waiting for connection') tcpClientSock, addr=sock.accept() print('connect from ', addr) while True: try: data=tcpClientSock.recv(BUFSIZ) except: print(e) tcpClientSock.close() break if not data: break s='Hi,you send me :[%s] %s' %(ctime(), data.decode('utf8')) tcpClientSock.send(s.encode('utf8')) print([ctime()], ':', data.decode('utf8')) tcpClientSock.close() sock.close()
Client:
#-*- coding: utf-8 -*- from socket import * class TcpClient: HOST='127.0.0.1' PORT=12345 BUFSIZ=1024 ADDR=(HOST, PORT) def __init__(self): self.client=socket(AF_INET, SOCK_STREAM) self.client.connect(self.ADDR) while True: data=input('>') if not data: break self.client.send(data.encode('utf8')) data=self.client.recv(self.BUFSIZ) if not data: break print(data.decode('utf8')) if __name__ == '__main__': client=TcpClient()
上面的TCP方式有个问题,不能退出,好吧,我们改造一下,使这个程序可以发送quit命令以退出:
Server:
#-*- coding: utf-8 -*- from socket import * from time import ctime from time import localtime import time HOST='' PORT=1122 #设置侦听端口 BUFSIZ=1024 ADDR=(HOST, PORT) sock=socket(AF_INET, SOCK_STREAM) sock.bind(ADDR) sock.listen(5) #设置退出条件 STOP_CHAT=False while not STOP_CHAT: print('等待接入,侦听端口:%d' % (PORT)) tcpClientSock, addr=sock.accept() print('接受连接,客户端地址:',addr) while True: try: data=tcpClientSock.recv(BUFSIZ) except: #print(e) tcpClientSock.close() break if not data: break #python3使用bytes,所以要进行编码 #s='%s发送给我的信息是:[%s] %s' %(addr[0],ctime(), data.decode('utf8')) #对日期进行一下格式化 ISOTIMEFORMAT='%Y-%m-%d %X' stime=time.strftime(ISOTIMEFORMAT, localtime()) s='%s发送给我的信息是:%s' %(addr[0],data.decode('utf8')) tcpClientSock.send(s.encode('utf8')) print([stime], ':', data.decode('utf8')) #如果输入quit(忽略大小写),则程序退出 STOP_CHAT=(data.decode('utf8').upper()=="QUIT") if STOP_CHAT: break tcpClientSock.close() sock.close()
Client:
#-*- coding: utf-8 -*- from socket import * class TcpClient: #测试,连接本机 HOST='127.0.0.1' #设置侦听端口 PORT=1122 BUFSIZ=1024 ADDR=(HOST, PORT) def __init__(self): self.client=socket(AF_INET, SOCK_STREAM) self.client.connect(self.ADDR) while True: data=input('>') if not data: break #python3传递的是bytes,所以要编码 self.client.send(data.encode('utf8')) print('发送信息到%s:%s' %(self.HOST,data)) if data.upper()=="QUIT": break data=self.client.recv(self.BUFSIZ) if not data: break print('从%s收到信息:%s' %(self.HOST,data.decode('utf8'))) if __name__ == '__main__': client=TcpClient()
注:以上代码为Python3。
总结
以上就是本文关于Python Socket使用实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“Python Socket使用实例”评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
2024年11月26日
2024年11月26日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]