网络编程杂项高级

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) # 打印服务端传输过来的数据

猜你喜欢

转载自www.cnblogs.com/lc1013/p/10216497.html