码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程杂项高级

时间:2019-01-03 20:10:12      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:lin   类型   error   发送数据   list   异常   reset   退出   unicode   

tcp聊天,
#server端实现:

import socket
sk=socket.socket() # 实例化socket对象
address=("0.0.0.0",8000) #设置端口
sk.bind(address) # 绑定IP地址和端口
sk.listen(5) #监听
while True:
conn,addr=sk.accept()#conn接受数据,addr获取客户端ip地址
while True: # 这个循环来实现相互之间聊天的逻辑
try: #win被中断连接就会异常 linux不会
data=conn.recv(1024) #定义1024字节接受数据,这里的数据只能是bytes类型的数据,否则报错;
if data: # 假如客户端传递数据过来时
print("-->",str(data,"utf-8")) # 打印客户端传递过来的数据,需要从bytes类型数据解码成unicode类型的数据
data=bytes(input(">>>"),"utf-8") # 接收输入的数据并转换成bytes类型的数据
conn.send(data) # 将bytes类型的数据发送给客户端
else: # 否则客户端连接的对象,当客户端正常退出,执行了sk.close()时将不会发送数据到服务端
conn.close() # 这时关闭这个conn对象并退出当前循环等待下一个客户端对象来连接
break
except ConnectionResetError as e: # 捕获到异常之后,打印异常出来并退出循环等待下一个客户端连接
print(e)
break
#client端实现
import socket # 导入socket模块
sk=socket.socket() # 实例化客户端对象
address=("127.0.0.1",8000) # 设置客户端需要连接的服务端IP地址以及端口
sk.connect(address) # 连接服务端的IP地址以及端口
while True: # 循环实现对话
data=input(">>>").strip() # 获取用户输入的数据
if data=="exit": # 如果输入的是exit 关闭该对象并退出程序
sk.close() # 关闭对象
break # 退出循环
sk.send(bytes(data,"utf-8")) # 发送刚输入的数据,要先转换成bytes类型的数据
data=str(sk.recv(1024),"utf-8") # 接收服务端发送的数据,并将其转换成unicode数据类型
print("-->",data) # 打印服务端传输过来的数据

网络编程杂项高级

标签:lin   类型   error   发送数据   list   异常   reset   退出   unicode   

原文地址:https://www.cnblogs.com/lc1013/p/10216497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!