套接字连接不起作用,并且我没有收到错误消息

时间:2018-09-10 03:32:23

标签: python

因此,我一直在努力获取多个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”语句实际上仅适用于我当前的命令。我相当确定问题一定出在服务器脚本中或客户端脚本的顶部。

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

注意:我没有任何错误。

0 个答案:

没有答案