python网络编程之TCP
时间:2021-09-08
本文章向大家介绍python网络编程之TCP,主要包括python网络编程之TCP使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
python网络编程之TCP
TCP中服务器端server_socket = socket(AF_INET,SOCK_STREAM)
客户端:client.py
from socket import *
from threading import Thread
from tcp.client_handler import *
def main():
client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect(('localhost', 8888))
user_name = input("用户名:")
client_socket.send(user_name.encode("utf-8"))
Thread(target=sendMsg, args=(client_socket,)).start()
Thread(target=receiveMsg, args=(client_socket,)).start()
if __name__ == '__main__':
main()
客户端处理:client_handler.py
import json
def sendMsg(client_socket):
while True:
input_msg = input().split("@")
if len(input_msg) == 1:
msg = input_msg[0]
toPerson = "all"
elif len(input_msg) == 2:
msg = input_msg[0]
toPerson = input_msg[1]
else:
print("注意格式,消息@对方用户名")
data = {"msg": msg, "toPerson": toPerson}
data = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=True)
client_socket.send(data.encode("utf-8"))
def receiveMsg(client_socket):
while True:
msg = client_socket.recv(1024)
print(msg.decode("utf-8"))
服务器端:server.py
from socket import *
from threading import Thread
from tcp.server_handler import *
def main():
server_socket = socket(AF_INET, SOCK_STREAM)
server_socket.bind(('localhost', 8888))
server_socket.listen(5)
map = {}
while True:
try:
client_socket, client_info = server_socket.accept()
user_name = client_socket.recv(1024).decode("utf-8")
print(user_name + "上线了。。。")
map[user_name] = client_socket
Thread(target=handler, args=(client_socket, map)).start()
except Exception as e:
print(e)
if __name__ == '__main__':
main()
服务器处理:server_handler.py
import json
def handler(client_socket, map):
user_name = findKey(client_socket, map)
while True:
try:
data = client_socket.recv(1024)
data = json.loads(data)
msg = data["msg"]
toPerson = data["toPerson"]
if "all".endswith(toPerson):
msg = user_name + ":" + msg
for key in map.keys():
if user_name.endswith(key):
continue
map[key].send(msg.encode("utf-8"))
else:
msg = user_name + "对您私聊说:" + msg
map[toPerson].send(msg.encode("utf-8"))
except Exception as e:
print(user_name+"下线了。。。")
map.pop(user_name)
client_socket.close()
break
def findKey(client_socket, map):
key_list = []
value_list = []
for key, value in map.items():
key_list.append(key)
value_list.append(value)
if client_socket in value_list:
value_index = value_list.index(client_socket)
return key_list[value_index]
运行结果:(先运行服务器,再运行多个客户端)
原文地址:https://www.cnblogs.com/it-ruanjie/p/15244523.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JS获取当前系统时间戳的方法
- TensorFlow 2建立神经网络分类模型——以iris数据为例
- 突击并发编程JUC系列-阻塞队列 BlockingQueue
- Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线
- Python安装TensorFlow 2、tf.keras和深度学习模型的定义
- TensorFlow2 keras深度学习:MLP,CNN,RNN
- Flutter ListView 局部刷新数据、ListView点赞收藏
- R语言公交地铁路线网络图实现数据挖掘实战
- R语言风险价值VaR(Value at Risk)和损失期望值ES(Expected shortfall)的估计
- R语言机器学习实战之多项式回归
- 5000字!带你零距离接触websocket!
- 使用 GitLab CI 和 Docker 自动部署 Spring Boot 应用
- 玩转StyleGAN2模型:教你生成动漫人物
- R语言时间序列数据指数平滑法分析交互式动态可视化
- 再见Excel!最强国产开源在线表格Luckysheet走红GitHub