2017-09-20 17 views
-1

私は現在、クライアント/サーバープログラムで作業しています。クライアントプログラムは、Windowsユーザ名をサーバに送信します。サーバープログラムは、os.systemを使用して、ユーザー名に対して「net user」コマンドを実行します。これは機能します。サーバから情報を受け取るためのPythonソケット?

サーバーにWindowsの「ネットユーザー」コマンドの結果をクライアントクライアントに送り返したいとします。ここ は私の作業プログラムです:

client.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() 

server.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() 

は今ここに私が追加しようとしているものです:

client2.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() 

server2.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() 

これを正しく行う方法についてのご意見はありますか?

答えて

0

簡単な答えは、コネクションレスのデータグラムソケット(UDP)を介して情報を送信していることです。そのため、サーバーは返信できません。返信する方法はありません。

おそらく、2つのプロセス間の接続を作成するストリームソケット(TCP)を使用する必要があります。

また、クライアントでリッスンするデータグラムソケットをハードコードしています&あなたのサーバーは魔法のようにどのソケットを知っていて、そのソケットに盲目的に答えを送ります。 (これをしないでください)...それが私たちがTCPを発明した理由です。

関連する問題