使用 UDP 套接字

原文:https://www.studytonight.com/network-programming-in-python/working-with-udp-sockets

嗯,在插座的基本教程中,你可能有一个困惑,我们将插座定义为:

S = socket.socket(socket_family, socket_type, protocol = 0)

但是,在上一篇关于 TCP 套接字的教程中,我们仅仅通过编写S=socket.socket()来定义 TCP 套接字,也就是说没有提供 socket_familysocket_type 。如果不提插座 _ 家族插座 _ 类型,那么默认为TCP。所以,如果我们想创建一个 UDP 套接字,我们必须明确指定 socket_familysocket_type

对于 UDP 套接字,我们定义:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

并且,如果您明确想要定义一个 TCP 套接字:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

简单的 UDP 服务器程序

这是udpserver.py的剧本:

#!usr/bin/python

import socket

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)      # For UDP

udp_host = socket.gethostname()                # Host IP
udp_port = 12345                            # specified port to connect

#print type(sock) ============> 'type' can be used to see type 
                # of any variable ('sock' here)

sock.bind((udp_host,udp_port))

while True:
    print "Waiting for client..."
    data,addr = sock.recvfrom(1024)            #receive data from client
    print "Received Messages:",data," from",addr

上述脚本的输出如下。保持运行,然后启动client.py模块。

UDP Sockets


简单 UDP 客户端

这是udpclient.py的剧本:

#!usr/bin/python

import socket

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)      # For UDP

udp_host = socket.gethostname()        # Host IP
udp_port = 12345                    # specified port to connect

msg = "Hello Python!"
print "UDP target IP:", udp_host
print "UDP target Port:", udp_port

sock.sendto(msg,(udp_host,udp_port))        # Sending message to UDP server

我们的udpserver.py已经启动并运行,所以现在我们尝试运行udpclient.py脚本,

UDP Sockets

以下是客户端发送请求后我们的服务器发生的情况:

UDP Sockets


程序流程图

UDP Sockets

因此,在本教程和最后一个教程中,我们已经学习了如何使用 TCP 套接字和 UDP 套接字建立成功的客户端-服务器连接。