在收到一个输入之前,套接字编程中的用户未获得多个用户输入

问题描述

我试图在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()

我在服务器文件中的输出

  1. 已创建套接
  2. 将端口与9999绑定
  3. 等待连接
  4. 已通过IP192.168.0.103端口号52557建立连接
  5. 已通过IP192.168.0.103端口号52558建立连接
  6. 用户已通过IP连接到端口号为52557的聊天应用程序 地址192.168.0.103
  7. 用户已通过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 (将#修改为@)