前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python TCP 协议网络编程《五》

Python TCP 协议网络编程《五》

作者头像
Wu_Candy
发布2022-07-04 20:05:23
2340
发布2022-07-04 20:05:23
举报
文章被收录于专栏:无量测试之道
作者 | 无量测试之道 编辑 | 小 晴
这是无量测试之道的第152篇原创

今日主题:今天分享的内容是在Python TCP 协议网络编程《四》的基础上增加了在服务端的登录用户校验,如果客户端输入的用户名不是服务端列表中的,就无法进入正常的聊天室。

具体实现代码如下

server.py文件内容如下

代码语言:javascript
复制
 1from socket import socket,SOCK_STREAM,AF_INET #导入模块
 2from threading import Thread #导入线程包
 3
 4sockets=[] #用于存放所有请求过来的client的socket
 5
 6userlist=['tony','jack','lucy','lily']
 7
 8def tcp_server():
 9    tcp_server_socket=socket(AF_INET,SOCK_STREAM) #创建TCP服务端套接字对接,UDP是SOCK_DGRAM
10    server_address=('127.0.0.1',9999)#定义本TCP服务端的ip and port
11    tcp_server_socket.bind(server_address) #绑定本机的8888端口
12    tcp_server_socket.listen(128) #设置监听,并设置最大等待连接数为128
13    while 1:
14        print("i'm accepting")
15        client_socket, client_info = tcp_server_socket.accept()  # 接收客户端的socker and info
16        print(client_socket,client_info)
17        sockets.append(client_socket)
18        t=Thread(target=get_msg,args=(client_socket,)) #开启线程来处理当前请求过来的client
19        t.start()
20
21def get_msg(client_socket):
22    while 1:
23        data=client_socket.recv(1024)
24        print("the data:",data)
25        name=str(data,encoding="utf-8")
26        print("the data:",name)
27        if(len(data)>0 and name in userlist):
28            for sk in sockets:
29                print(sk,data)
30                sk.send(data)
31        else:
32            for sk in sockets:
33                sk.send("username is wrong,please input again...".encode("utf-8"))
34
35
36if __name__ == '__main__':
37    print("the TCP server is running ...")
38    tcp_server()

client.py文件内容如下

代码语言:javascript
复制
 1from socket import socket,SOCK_STREAM,AF_INET #导入模块
 2from threading import Thread #导入线程包
 3
 4tcp_client_socket = socket(AF_INET, SOCK_STREAM)  # 创建TCP客户端套接字对接
 5server_address = ('127.0.0.1', 9999)  # 定义本TCP服务端的ip and port
 6tcp_client_socket.connect(server_address)  # 连接到服务端
 7
 8response=''
 9count=1
10
11def tcp_client():
12    thread1=Thread(target=read_msg,args=(tcp_client_socket,))
13    thread1.start()
14
15    thread2= Thread(target=send_msg, args=(tcp_client_socket,))
16    thread2.start()
17
18def send_msg(tcp_client_socket):
19    global count
20    while 1:
21        if(count==1):
22            message = input(">>>请输入你的登录名称:")
23        else:
24            if("wrong" not in response):
25                message = input(">>>可以开始聊天:")
26            else:
27                message = input(">>>请输入你的登录名称:")
28        tcp_client_socket.send(message.encode("utf-8"))
29        import time
30        time.sleep(1)
31        count+=1
32
33def read_msg(tcp_client_socket):
34    global response
35    while 1:
36        resv_data = tcp_client_socket.recv(1024)
37        print("the response of message is:",resv_data.decode("utf-8"))
38        response=resv_data.decode("utf-8")
39
40if __name__ == '__main__':
41    print("the TCP client is running ...")
42    tcp_client()

client console output内容如下

代码语言:javascript
复制
1the TCP client is running ...
2>>>请输入你的登录名称:aa
3the response of message is: username is wrong,please input again...
4>>>请输入你的登录名称:bb
5the response of message is: username is wrong,please input again...
6>>>请输入你的登录名称:tony
7the response of message is: tony
8>>>可以开始聊天:
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者 | 无量测试之道 编辑 | 小 晴
  • 这是无量测试之道的第152篇原创
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档