从服务器接收信息的Python套接字?

2024-04-19 06:46:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在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()

有什么建议可以让我做的更好吗


Tags: importipnumberdatasizeosportsys
1条回答
网友
1楼 · 发布于 2024-04-19 06:46:47

简而言之,您正在通过无连接数据报套接字(UDP)发送信息。这就是为什么你的服务器无法回复,因为它没有任何方式来回传

您可能应该使用流套接字(TCP),它在两个进程之间创建连接

或者,硬编码一个数据报套接字,以便在客户机中侦听;您的服务器神奇地“知道”哪个套接字并盲目地将答案发送到该套接字(不要这样做)。。。这就是为什么我们发明了TCP

相关问题 更多 >