IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 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]

运行结果:(先运行服务器,再运行多个客户端)


  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 12:08:14  更:2021-09-09 12:08:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/27 1:39:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码