首页 > 解决方案 > 套接字连接不起作用,我没有收到错误消息

问题描述

所以我一直在努力让多个 python 文件进行通信,其中一个文件充当服务器。这里的目标是能够控制所有运行“客户端”脚本实例以连接到“服务器”脚本的 PC,我可以从中控制每台 PC。

由于我目前正在一台 PC 上测试所有这些,因此我运行了一个服务器实例和客户端脚本。通常,我会启动“服务器”脚本的一个实例,而不是“客户端”脚本的一个实例。当“客户端”脚本第一次与“服务器”脚本对话时,“服务器”脚本应该显示属于运行“客户端”脚本的 PC 的 IP,但事实并非如此。

这是我的服务器脚本:

import socket,subprocess,time
print ("This is the server speaking")

def Main():
    host = "0.0.0.0"
    port = 2346

    s = socket.socket()
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind((host,port))

    s.listen(10)
    conn,addr = s.accept()
    print ("connection from: " + str(addr))
    while True:
        message=input(" -> ")
        while message !='q':
            conn.send(message.encode())
            data=conn.recv(16834).decode()
            print ("Received data from server: " + data)

            message = input (" -> ")
    conn.close()
    time.sleep(5)
    Main()
if __name__ == "__main__":
    Main()

这是我的客户端脚本:

import socket,time,os
import subprocess

def Main():
        host = '127.0.0.1'
        port = 2346    
        conn = socket.socket()
        conn.connect((host,port))
        while True:
            #data = conn.recv(1024).decode()
            data = conn.recv(16384).decode()
            if not data:
                    break
            print ("from connected  user: " + str(data))
            if data == "tasklist":
                batcmd="tasklist"
                result = subprocess.check_output(batcmd, shell=True)
                data = str(result)
                conn.send(data.encode())
            elif "taskkill" in data:
                pid = data[9:]
                print (pid)
                try:
                    batcmd="taskkill /IM %s /F" % (pid)
                    result = subprocess.check_output(batcmd, shell=True)
                    data = str(result)
                    conn.send(data.encode())
                except:
                    pass
            elif "ls" in data:
                dirs = data[3:]
                try:
                    x = os.listdir(dirs)
                    data = str(x)
                    conn.send(data.encode())
                except:
                    data = "Dir. " +dirs+ " does not exist"
                    conn.send(data.encode())
            data = str(data)
            print ("sending: " + str(data))
            conn.send(data.encode())
        conn.close()

if __name__ == '__main__':
    Main()

中间的“if”和“elif”语句实际上只是针对我当前的命令。我相当确定问题一定出在服务器脚本的某个地方,或者客户端脚本的顶部。

这里的主要问题是,当我运行客户端脚本的实例时,服务器脚本端没有打印任何内容。如果有人可以提供帮助,那将不胜感激。

注意:我没有收到任何错误。

标签: python

解决方案


推荐阅读