【问题标题】:How to communicate from one python script with another via network?如何通过网络从一个 python 脚本与另一个 python 脚本进行通信?
【发布时间】:2022-11-20 02:08:35
【问题描述】:

我有一个服务器端(Python 3)和一个客户端(Python 2.7),我正在尝试使用套接字模块。 这个想法是,服务器端永久活动,客户端套接字通过函数调用连接。然后需要将数据从服务器发送到客户端,直到客户端断开连接(手动)。然后服务器应该回到监听过程并等待下一个连接。我对套接字没有任何经验,我一直在尝试我发现的一些例子。在第一行,我的问题是重新连接到同一个服务器套接字。

服务器端:

import socket

HOST = "127.0.0.1"
PORT = 65432
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))

s.listen()
conn, addr = s.accept()
print("Connected by", addr)

for x in range(10):
    data = conn.recv(1024)
    if not data:
        break
    conn.sendall(data)

conn.close()

客户端(使用 Tkinter-GUI):

import Tkinter as tk
import socket
import random
import time
keyState = False
HOST = '127.0.0.1'
PORT = 65432


def onButton():
    global keyState 

    if(not keyState ):
        keyState = not keyState 
        key_button.config(relief='sunken')
        connectSocket()
        print(keyState)
        return
    if(keyState ):
        keyState = not keyState 
        key_button.config(relief='raised')
        disconnectSocket()
        print(keyState )
        return


def connectSocket():
    print("connectSocket()")
    global HOST, PORT
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    for x in range(10):
        if(x<5):
            val = random.uniform(0.0, 400.0)
        else:
            val = random.uniform(-400,0)
        s.sendall(str(val))
        data = s.recv(1024)
        print 'Received', repr(data)
    s.close()

    
def disconnectSocket():
    print("disconnectSocket()")
    return


#Main GUI
root = tk.Tk()
root.title('Python Socket Test')
root.configure(background='white')
root.geometry("200x300")


#Button
root.update()
softkey_button = tk.Button(root, text="Softkey", command = lambda: onButton(), relief='flat')
softkey_button.place(x=75,y=200)


root.mainloop()

【问题讨论】:

    标签: python sockets networking server client


    【解决方案1】:

    您只需要在服务器端添加一个 while True 循环,目前您只接受一个连接,连接关闭后程序停止。在您的服务器文件上试试这个:

    import socket
    
    HOST = "127.0.0.1"
    PORT = 65432
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    
    while True:
        s.listen()
        conn, addr = s.accept()
        print("Connected by", addr)
        
        for x in range(10):
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)
        
        conn.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 2017-03-30
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多