Python套接字:客户端发送到服务器

时间:2020-05-17 19:17:55

标签: python-3.x multithreading sockets tkinter connect

我正在使用tkinter和python 3进行游戏项目。我已经在服务器和客户端之间进行了连接。

当我打开服务器时,会打开一个窗口,提示您是否可以启动服务器(启动和停止)。连接后,参与者的姓名将显示在窗口底部。

启动客户端时,将打开另一个窗口,我必须在其中键入游戏的昵称。当我单击“连接”时,客户端应将信息发送到服务器,该服务器将参与者的姓名添加到列表中。

我对print进行了几次测试,以了解它在函数connect_to_the_server中将走多远,而当我将其放在client.send (name )下方时,不再显示打印内容

Server.py

import tkinter as tk
import socket
import threading
from time import sleep
import random

server = None
HOST_ADDR = "192.168.1.13"
HOST_PORT = 5555
client_name = ""
clients = []
clients_names = []
player_data = []

def send_receive_client_message(client_connection, client_ip_addr):
    global server, client_name, clients, player_data, player0, player1

    client_msg = " "  
    client_name = client_connection.recv(4096)

    clients_names.append(client_name)
    update_client_names_display(clients_names)  # update client names display

def accept_clients(the_server, y):
    while True:
        if len(clients) < 2:
            client, addr = the_server.accept()
            clients.append(client)

            # use a thread so as not to clog the gui thread
            threading._start_new_thread(send_receive_client_message, (client, addr))

Client.py

import tkinter as tk
from tkinter import PhotoImage
from tkinter import messagebox
import socket
from time import sleep
import threading

#This is the button that should send the name to the server
btn_connect = tk.Button(top_welcome_frame, text="Connect", command=lambda: connect()) 

client = None
HOST_ADDR = "192.168.1.13"
HOST_PORT = 5555

def connect():
    global your_details
    if len(ent_name.get()) < 1:
        tk.messagebox.showerror(title="ERROR!!!", message="You MUST enter your first name <e.g. John>")
    else:
        your_details["name"] = ent_name.get()
        connect_to_server(ent_name.get())


def connect_to_server(name):
    global client, HOST_PORT, HOST_ADDR
    try:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect((HOST_ADDR, HOST_PORT))
        print("Connexion OK")
        client.send(name)  # Send name to server after connecting
        print("name send")
        # start a thread to keep receiving message from server
        # do not block the main thread :)
        threading._start_new_thread(receive_message_from_server, (client, "m"))
        top_welcome_frame.pack_forget()
        top_frame.pack(side=tk.TOP)
        window_main.title("Tic-Tac-Toe Client - " + name)
    except Exception as e:
        tk.messagebox.showerror(title="ERROR!!!", message="Cannot connect to host: " + HOST_ADDR + " on port: " + str(
            HOST_PORT) + " Server may be Unavailable. Try again later")

我正在尝试解决此问题,但是我不知道它来自哪里。感谢您的帮助。

0 个答案:

没有答案