函数介绍
Socket对象方法:
服务端:
函数
描述
.bind()
绑定地址关键字,AF_INET下以元组的形式表示地址。常用bind((host,port))
.listen()
监听TCP,可以挂起的最大连接数,该值至少为1,一般设为5即可
.accept()
被动接受TCP客户端的连接
客户端:
函数
描述
.connect()
初始化服务器连接
.connect_ex()
是对connect()函数的扩展,当出错时返回出错码,不报异常
其它函数:
函数
描述
.recv()
接收数据,数据以字符串的形式返回,bufsize指定接收的最大数据量。
.send()
发送数据,将string中的数据发送到连接的套接字,返回值是要发送的字节数量,通常使用.encode()函数对数据进行转码
.senddall()
发送完整的数据,在返回之前会尝试发送所有数据,成功返回None,失败则抛出异常。
.recvfrom()
与recv()函数类似,不同的是返回值是(data,address),其中data是包含接收数据的字符串,address是发送数据的套接字地址。
.sendto()
发送UDP数据,将数据发送到套接字,形式是(ipaddr,port)的元组。
.close()
关闭套接字
服务端
使用socket函数来创建一个socket对象,并设置一个socket服务,然后通过bind(hostname,port)函数来指定一个端口,使用socket对象的accept方法,等待客户端的连接,并返回connection对象。
具体步骤为:
创建服务端套接字 serversocket=socket() 把地址绑定到套接字 serversocket.bind() 对连接进行监听 serversocket.listen() 使用一个while进行循环,并接收客户端的连接 while True: serverclient=serversocket.accept() while True: #接收已发送 serverclient.recv() serverclient.send() #关闭客户端套接字 serverclient.close() 关闭服务端套接字 serversocket.close()
具体代码实现:
import socket import sys import time serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) host=socket.gethostname()#获取本地主机名 port=9999 #绑定端口号 serversocket.bind((host,port)) #设置最大连接数 serversocket.listen(5) while True: print('服务器启动,监听客户端链接') clientsocket,addr=serversocket.accept() print('链接地址:%s' % str(addr)) while True: try: data=clientsocket.recv(1024) except Exception: print('断开的客户端:',addr) break print('客户端发送内容:',data.decode('utf-8')) reply=input('回复:').strip() if not reply: break msg=time.strftime('%Y-%m-%d %X')#获取结构化时间戳 msg1='[%s]:%s'% (msg,reply) clientsocket.send(msg1.encode('utf-8')) clientsocket.close() serversocket.closel()
实现功能:通过while实现循环接收客户端发送的数据,并对客户端发送的数据进行显示并返回给客户端数据,返回给客户端的数据信息后加入时间戳。
客户端
创建一个客户端用来连接以上服务的的服务,使用socket.connect()方法打开一个TCP连接到主机,连接后可以从服务端获取数据,在操作完成后关闭连接。 具体步骤为: ``` 创建客户端的套接字 client=socket() 尝试连接服务器 client.connect() 发送并接收数据 client.send() client.recv() 关闭客户端套接字 client.close() ``` **具体代码实现:**
import socket import sys s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) host=socket.gethostname() port=9999 s.connect((host,port)) while True: data= input('').strip() if not data: break s.send(data.encode('utf-8')) msg=s.recv(1024) if not msg: break print(msg.decode('utf-8')) s.close()
测试
使用cmd命令行中打开到代码所在文件目录,执行python 服务端文件名.py,再另打开一个cmd命令界面执行 python 客户端文件名.py
在pycharm中运行服务端代码,运行结果:
在cmd中运行客户端代码,运行结果:
以上就是python 实现客户端与服务端的通信的详细内容,更多关于python 客户端与服务端的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】