问题描述
我试图在python套接字编程中创建2个用户之间的聊天应用。我使用本地主机作为服务器,并以2个不同的用户身份创建了2 client.py
个文件。基本上,本地主机将充当服务器,并且两个用户可以在其中加入并通过服务器相互发送味精。 (是的,我是tryna进行套接字编程)
但是问题是,我在收到一个用户之前就无法从用户那里获取新的接收数据,就像用户没有发送包含用户名的新日期一样。
这是Server.py
文件
import socket
all_connections = []
all_address = []
def create_socket():
global host
global port
global s
host = '192.1.0.103' #put your own IP adress
port = 9999
s = socket.socket()
print('socket created')
def binding():
try:
global host
global port
global s
print('binding the port with ' + str(port))
s.bind((host,port))
s.listen(2)
print('waiting for connection')
except socket.error as msg:
print("Socket binding error happened " + str(msg) + "\n" + "retrying to connect again")
binding()
def accept_connection():
global c
for c in all_connections:
c.close()
del all_connections[:]
del all_address[:]
while True:
c,add = s.accept()
all_connections.append(c)
all_address.append(add)
print("connection has been established with " + "IP" + add[0] + "Port no." + str(add[1]))
if len(all_connections)==2:
chatting_app(all_connections)
# except:
# print("Error accepting connections")
def chatting_app(all_connections):
user_name = []
global counter
global rec
try:
rec1 = str(all_connections[0].recv(20780),"utf-8")
rec2 = str(all_connections[1].recv(20780),"utf-8")
if rec1 == "Yes" or 'yes':
print("user has been connected to chatting app with port number" + str(all_address[0][1]) + "with IP address " + all_address[0][0])
all_connections[0].send(str.encode("joined","utf-8"))
name1 = str(all_connections[0].recv(20780),"utf-8")
if name1[:3] == 'nam':
user_name.append(rec1[3:])
if rec2 == "Yes" or 'yes':
print("user has been connected to chatting app with port number" + str(all_address[1][1]) + "with IP address " + all_address[1][0])
all_connections[1].send(str.encode("joined","utf-8"))
name2 = str(all_connections[1].recv(20780),"utf-8")
if name2[:3] == 'nam':
user_name.append(rec2[3:])
if rec1 and rec2 == "Yes" or 'yes':
print(user_name[0])
print(user_name[1])
print("Both user has been connected")
all_connections[0].send(str.encode("found" + "You have been connected to {},Now you begin your conversation".format(user_name[1]),"utf-8"))
all_connections[1].send(str.encode("found" + "You have been connected to {},Now you begin your conversation".format(user_name[0]),"utf-8"))
elif rec1[:3] == "msg":
all_connections[1].send(str.encode(rec1),"utf-8")
elif rec2[:3] == "msg":
all_connections[0].send(str.encode(rec2),"utf-8")
elif rec1[:3] == "qui":
print("User 1 has been disconnected")
all_connections[0].close()
elif rec2[:3] == "qui":
print("User 2 has been disconnected")
all_connections[1].close()
except Exception as m:
print("Error while connecting to chat app",m)
create_socket()
binding()
accept_connection()
这是Client.py
import socket
def connecting():
global s
try:
s = socket.socket()
host= "192.1.0.103"
port= 9999
s.connect((host,port))
task()
except socket.error as msg:
print("error while connecting to the server "+ "\n" + "retrying..")
connecting()
def task():
print("Welcome to chatting app")
name=input("Enter your name")
respond=str(input("hey {},would you like to chat with other members ? ( Type Yes or No )".format(name)))
if respond == 'Yes' or 'yes':
s.send(str.encode(respond,'utf-8'))
else:
print("Thanx for connecting")
data=s.recv(20480)
if data.decode("utf-8")=="joined":
print("Congratulation,you have been join with our server. Wait for other users to join your chat room")
n='nam' + name
s.send(str.encode(n,'utf-8'))
if data[:5].decode("utf-8")== "found":
print(data[5:])
print("send your first message")
msg=input("")
n='msg' + msg
s.send(str.encode(n,'utf-8'))
if data[:3].decode("utf-8")== "msg":
print(data[3:])
msg = input("")
if msg=="Exit" or "exit" :
s.send(str.encode('qui' + msg,'utf-8'))
print("You have been disconnected from the server")
recon=str(input("Would you like to reconnect ? ( Type Yes or No )"))
if recon == "yes" or "Yes":
connecting()
else:
print("Thanks for using chat app,You may Now close the app")
s.send(str.encode('msg' + msg,'utf-8'))
connecting()
- 已创建套接字
- 将端口与9999绑定
- 等待连接
- 已通过IP192.168.0.103端口号52557建立连接
- 已通过IP192.168.0.103端口号52558建立连接
- 用户已通过IP连接到端口号为52557的聊天应用程序 地址192.168.0.103
- 用户已通过IP连接到端口号为52558的聊天应用程序 地址192.168.0.103
我在一个客户端文件中的输出是((两个客户端文件中的输出是相同的,只是输入的名称不同)
- 欢迎使用聊天应用
- 输入您的名字罗宾
- 嗨,罗宾,您想和其他成员聊天吗? (输入是或 否)是
- 恭喜,您已经加入我们的服务器。等待其他 用户加入您的聊天室
所以问题是我应该在server.py
文件中获得以下几行的输出
n='nam' + name
s.send(str.encode(n,'utf-8'))
存储在此行
if rec1 and rec2 == "Yes" or 'yes':
print(user_name[0])
print(user_name[1])
print("Both user has been connected")
all_connections[0].send(str.encode("found" + "You have been connected to {},"utf-8"))
all_connections[1].send(str.encode("found" + "You have been connected to {},"utf-8"))
但是它既不会打印存储在user_name[]
列表中的所有值,也不会向客户端发送新的发送数据
所以基本上程序在那里停止了。哪个不应该发生
那么你们能告诉我我在做错什么吗?会很有帮助
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)