当前位置:   article > 正文

Python之socket-UDP协议通信_sendaddr

sendaddr

socket简称套接字,是进程间通信的一种方式,它与其他进程间通信的一个主要不同是,它能实现不同主机间的进程通信。


socket创建:可以使用socket模块下的socket方法来创建。

        参数:AF_INET 用于Internet进程间通信

                  AF_UNIX用于一台机器进程间通信

                  SOCK_DRGAM数据报套接字,主要用于UDP协议

                  SOCK_STREAM流式套接字,主要用于TCP协议通信

        常用指令:

                 sendto :发送数据。sendto("data",("IP",Port))

                bind: 绑定IP及端口。 bind(('IP',Port)) 其中通常情况下IP不写,系统会默认分配。

                recvfrom: 用于接收数据,recvfrom(1024)

   创建socket:

from socket import *
UdpSocket = socket(AF_INET,SOCK_DGRAM)
TcpSocket = socket(AF_INET,SOCK_STREAM)

import  socket
UdpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
TcpSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

以上两种方式均可以创建DUP、TCP套接字


UDP协议数据发送:

from socket import *
UdpSocket = socket(AF_INET,SOCK_DGRAM)
TcpSocket = socket(AF_INET,SOCK_STREAM)


SendAddr = ('192.168.5.1',8080)
#sendData = input("请输入发送内容")
sendData = "测试UDP套接字"
UdpSocket.sendto(sendData.encode("gb2312"),SendAddr)
使用网络调试助手接收UDP协议数据


    代码讲解:UdpSocket创建一个UDP的socket套接字,SendAddr为目标地址,以元组的形式保留("IP",Prot);sendData为需要发送的数据以字符串形式保存。encode("gb2312")指使用gb2312对内容进行编码;在socket中有一个sendto方法,用于发送UDP数据, 其格式为:sendto(Data,Addr);

    注意:发现在网络助手中发现端口为63218, 在UDP发送中,通常不定义本机端口,系统会随机分配端口。


    UDP协议数据接收:

from socket import *
UdpSocket = socket(AF_INET,SOCK_DGRAM)
TcpSocket = socket(AF_INET,SOCK_STREAM)


AddrBind = ("",8893)
UdpSocket.bind(AddrBind)
TempData = UdpSocket.recvfrom(1024)
print(TempData)

    代码讲解: 创建UDP-socket套接字,使用bind绑定IP及端口,使用recvfrom接收信息,并赋值给TempData,并打印出来。


 例:UDP协议全双工,模式聊天室

from socket import *
from threading import  Thread
UdpSocket = None
AddrIP = ''
AddrPort = 0 

def SendData():
    while True:
        #print(AddrIP,AddrPort)
        Data = input("请输入要发送的信息:")
        UdpSocket.sendto(Data.encode('gb2312'),(AddrIP,AddrPort))
        
def RecvfromData():
    while True:
        TempData = UdpSocket.recvfrom(1024)
        print(">>%s:%s"%(str(TempData[1]),TempData[0]))
        
def main():
    global UdpSocket
    global AddrIP
    global AddrPort
    UdpSocket = socket(AF_INET, SOCK_DGRAM)
    AddrIP = input("请输入目标地址:").strip()
    AddrPort = int(input("请输入目标端口:").strip())
    UdpSocket.bind(('',8893))
    ts = Thread(target=SendData)
    tr = Thread(target=RecvfromData)
    ts.start()
    tr.start()
    ts.join()
    tr.join()

if __name__ == "__main__":
    main()

    代码讲解:通过创建子线程的形式,来分别运行接发函数,从而实现聊天室

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/791307
推荐阅读
相关标签
  

闽ICP备14008679号