socket套接字

Zss 发表于:

一.UDP数据的发送,UDP每次数据的发送需要指定ip和端口号

socket(AF_INET, SOCK_DGRAM)创建一个UDP消息的对象

sendto(“haha”, (“192.168.119.210”, 8080))  发送的数据和知道那个的ip和端口

from socket import *

udpSocket = socket(AF_INET, SOCK_DGRAM)
#使用udp发送的数据,在每一次的是都需要写上接收方的ip和port
udpSocket.sendto("haha", ("192.168.119.210", 8080))

udpSocket.sendto("haha1", ("192.168.119.210", 8080))

二.端口的绑定

作为接收方一般需要绑定端口来确定位置,而发送方一般不需要绑定端口,因为发送方会随机生成一个未使用的端口号,每次发送数据端口号都会变化,而接收方的端口号一旦变化则收不到数据了

udpSocket.bind((“”, 7788))将7788端口绑定在本机的ip上

from socket import *

udpSocket = socket(AF_INET, SOCK_DGRAM)

udpSocket.bind(("", 7788))

udpSocket.sendto("haha", ("192.168.119.210", 2426))

三.UDP数据的接收

如之前所说接收方一定需要绑定端口号,不然端口号随机变化导致收不到消息

udpSocket.recvfrom(1024)  1024表示为最多接受到1024个字节

from socket import *

udpSocket = socket(AF_INET, SOCK_DGRAM)

udpSocket.bind(("", 7788))#绑定的目的:为了让接收方有一个明确的地址

recvData = udpSocket.recvfrom(1024)

print(recvData)

从发送端发送udp数据到接收端,接收端使用两个线程,一个线程用来计算收到的两个包的时差,并且统计出延时最高的前几的数据,另外一个线程用来实时的打印出这些数据

发送端

#coding:utf-8#
from socket import *
import time,sys
reload(sys)
sys.setdefaultencoding('utf-8')


class Send():
    def send(self,number,ip):
        for i in range(1,int(number)+1):
            data = 'This is roaming test,udp:{}'.format(str(i))
            ip_port = (ip,7777)
            time.sleep(0.0005)
            udpsocket.sendto(data,ip_port)


if __name__ == '__main__':
    udpsocket = socket(AF_INET,SOCK_DGRAM)
    udpsocket.bind(('',6666))
    number = raw_input('请输入发包的个数')
    ip = raw_input('请输入目的ip地址')
    s_time = time.time()
    server = Send()
    server.send(number,ip)
    print(time.time() - s_time)

接收端

#conding:utf-8#
from socket import *
import time,random
from threading import Thread

class Up():
    def __init__(self):
        self.time_list = []

    def get_time(self):
        udpsocket = socket(AF_INET,SOCK_DGRAM)
        udpsocket.bind(('',7777))
        while 1:
            s_time = time.time()
            data = udpsocket.recvfrom(1024)
            t = '%4f'%(time.time()-s_time)
            #print(t)
            self.time_list.append(t)

    def get_max_time(self):
        while 1:
            time.sleep(1.5)
            #print(self.time_list)
            self.time_list = sorted(self.time_list)
            self.time_list = list(reversed(self.time_list))
            #for i in self.time_list[:11]:
            #     print('time is:%s'%(i))
            print(self.time_list[:5])

if __name__ == '__main__':
    test = Up()
    thread1 = Thread(target=test.get_time)
    thread1.start()
    #time.sleep(3)
    thread2 = Thread(target=test.get_max_time())
    thread2.start()