Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过UDP重复通信_Python_Sockets_Server_Udp_Client - Fatal编程技术网

Python 通过UDP重复通信

Python 通过UDP重复通信,python,sockets,server,udp,client,Python,Sockets,Server,Udp,Client,当从模块创建连接时,可以建立连接并持续用于通信,直到一方执行命令为止。在编写了以下程序之后,我不清楚如果(出于各种原因)需要使用,如何继续与服务器通信。客户端是否应根据需要继续运行和方法,并假装服务器将接收消息并返回回复 客户端 import socket import sys def main(): host, port = 'localhost', 10000 data = ' '.join(sys.argv[1:]) client = socket.socke

当从模块创建连接时,可以建立连接并持续用于通信,直到一方执行命令为止。在编写了以下程序之后,我不清楚如果(出于各种原因)需要使用,如何继续与服务器通信。客户端是否应根据需要继续运行和方法,并假装服务器将接收消息并返回回复


客户端

import socket
import sys


def main():
    host, port = 'localhost', 10000
    data = ' '.join(sys.argv[1:])
    client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    client.sendto(data.encode(), (host, port))
    received = client.recv(1 << 12).decode()
    print('Sent:    ', data)
    print('Received:', received)


if __name__ == '__main__':
    main()

由于使用数据报时不存在保证连接,因此客户端可能会继续向服务器发送消息并尝试接收回复。在连接、关闭或关闭插座方面没有什么特别的事情要做。服务器应该像以前一样使用适当编写的处理程序来接收和发送客户端通信。以下示例演示如何编写此类程序,并包括用于指定其参数的命令行界面


UDPClient.py

#! /usr/bin/env python3
import argparse
import socket


def main():
    parser = argparse.ArgumentParser(description='Execute a UDP client demo.')
    parser.add_argument('host', type=str, help='computer where data is sent')
    parser.add_argument('port', type=int, help='location where server listens')
    arguments = parser.parse_args()
    address = arguments.host, arguments.port
    client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    for _ in range(5):
        message = input('>>> ').encode('ascii')
        client.sendto(message, address)
        response = client.recv(1 << 12).decode('ascii')
        print(response)


if __name__ == '__main__':
    main()
#! /usr/bin/env python3
import argparse
import socketserver


def main():
    parser = argparse.ArgumentParser(description='Execute a UDP server demo.')
    parser.add_argument('port', type=int, help='where the server will listen')
    arguments = parser.parse_args()
    host = socketserver.socket.gethostbyname(socketserver.socket.gethostname())
    address = host, arguments.port
    server = socketserver.ThreadingUDPServer(address, ClientRequestHandler)
    server.serve_forever()


class ClientRequestHandler(socketserver.DatagramRequestHandler):

    def handle(self):
        message = self.rfile.read().decode('ascii')
        print('Received:', message)
        response = 'Received: {}'.format(message).encode('ascii')
        self.wfile.write(response)


if __name__ == '__main__':
    main()
#! /usr/bin/env python3
import argparse
import socketserver


def main():
    parser = argparse.ArgumentParser(description='Execute a UDP server demo.')
    parser.add_argument('port', type=int, help='where the server will listen')
    arguments = parser.parse_args()
    host = socketserver.socket.gethostbyname(socketserver.socket.gethostname())
    address = host, arguments.port
    server = socketserver.ThreadingUDPServer(address, ClientRequestHandler)
    server.serve_forever()


class ClientRequestHandler(socketserver.DatagramRequestHandler):

    def handle(self):
        message = self.rfile.read().decode('ascii')
        print('Received:', message)
        response = 'Received: {}'.format(message).encode('ascii')
        self.wfile.write(response)


if __name__ == '__main__':
    main()