今日主题:今天分享的内容是在 Python TCP 协议网络编程《四》的基础上增加了在服务端的登录用户校验,如果客户端输入的用户名不是服务端列表中的,就无法进入正常的聊天室。
具体实现代码如下
server.py文件内容如下
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文件内容如下
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内容如下
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>>>可以开始聊天: