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”语句实际上只是针对我当前的命令。我相当确定问题一定出在服务器脚本的某个地方,或者客户端脚本的顶部。
这里的主要问题是,当我运行客户端脚本的实例时,服务器脚本端没有打印任何内容。如果有人可以提供帮助,那将不胜感激。
注意:我没有收到任何错误。
解决方案
推荐阅读
- javascript - 有人可以告诉我为什么我的代码正在运行。即使我已经评论了我的变量用户名,电子邮件,密码,密码2
- r - 在两列中识别相同的项目?
- flutter - 是否可以在 Flutter 中创建声音编辑器?
- c# - 使用 process.start 从 .netcore 运行 docker 会引发错误
- html - 用于修改加载网页图像的 Chrome 扩展程序
- python - 类型错误:* 之后的 add() 参数必须是可迭代的,而不是设置
- macos - Ace 编辑器行相互重叠
- python - 从列中提取子字符串
- php - 带有现成物品和发票的 PayPal 订阅 API
- security - Google 安全命令中心 - 资产安全标记与 FINDINGS 安全标记之间的关系