在Windows中,我正在开发一个客户机/服务器程序。客户端程序向服务器发送一个windows用户名。服务器程序使用os.system对用户名运行“net user”命令。这很管用
我想让服务器将Windows“net user”命令的结果发送回客户端。 以下是我的工作计划:
客户端.py
import sys
from socket import socket, AF_INET, SOCK_DGRAM
SERVER_IP = '10.x.xxx.xxx'
PORT_NUMBER = 2000
SIZE = 1024
print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER))
myMessage1 = input(' Please enter your login name: ')
mySocket = socket( AF_INET, SOCK_DGRAM )
mySocket.sendto(myMessage1.encode('ascii'),(SERVER_IP,PORT_NUMBER))
sys.exit()
服务器.py
import subprocess
import os
from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM
import sys
PORT_NUMBER = 2000
SIZE = 1024
hostName = gethostbyname( '0.0.0.0' )
mySocket = socket( AF_INET, SOCK_DGRAM )
mySocket.bind( (hostName, PORT_NUMBER) )
print ("Test server listening on port {0}\n".format(PORT_NUMBER))
# Receive no more than 1024 bytes
while True:
(data,addr) = mySocket.recvfrom(SIZE)
print (data.decode())
batcmd=('net user ' + data.decode() + ' /domain')
result = os.system(batcmd)
sys.exit()
我想补充的是:
客户端2.py
import os
import sys
from socket import socket, AF_INET, SOCK_DGRAM
SERVER_IP = '10.x.xxx.xxx'
PORT_NUMBER = 2000
SIZE = 1024
print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER))
myMessage1 = input(' Please enter your login name: ')
mySocket = socket( AF_INET, SOCK_DGRAM )
mySocket.sendto(myMessage1.encode('ascii'),(SERVER_IP,PORT_NUMBER))
# Receive result from server ?
(data,addr) = mySocket.recvfrom(SIZE)
print (result.decode())
sys.exit()
服务器2.py
import subprocess
import os
from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM
import sys
PORT_NUMBER = 2000
SIZE = 1024
hostName = gethostbyname( '0.0.0.0' )
mySocket = socket( AF_INET, SOCK_DGRAM )
mySocket.bind( (hostName, PORT_NUMBER) )
print ("Test server listening on port {0}\n".format(PORT_NUMBER))
# Receive no more than 1024 bytes
while True:
(data,addr) = mySocket.recvfrom(SIZE)
print (data.decode())
batcmd=('net user ' + data.decode() + ' /domain')
result = os.system(batcmd)
# send result back to client ?
mySocket.send(result.encode('ascii'))
sys.exit()
有什么建议可以让我做的更好吗
简而言之,您正在通过无连接数据报套接字(UDP)发送信息。这就是为什么你的服务器无法回复,因为它没有任何方式来回传
您可能应该使用流套接字(TCP),它在两个进程之间创建连接
或者,硬编码一个数据报套接字,以便在客户机中侦听;您的服务器神奇地“知道”哪个套接字并盲目地将答案发送到该套接字(不要这样做)。。。这就是为什么我们发明了TCP
相关问题 更多 >
编程相关推荐