zoukankan      html  css  js  c++  java
  • udp套接字

    '''udp套接字'''
    from socket import *
    '''服务端'''
    
    ip_port = ('127.0.0.1', 8000)
    buffer_size = 1024
    # 服务器信息和recv收录字节大小,到时候这样的数据可以写到配置文件,程序代码可无需把数据写死
    
    udp_server = socket(AF_INET, SOCK_DGRAM) # DGRAM=datagram,翻译为数据报的意思
    # socket实例化
    
    udp_server.bind(ip_port)
    # 绑定服务器ip和端口
    
    while True:
       data, addr = udp_server.recvfrom(buffer_size) # 收到的消息是元组的类型,第一个参数为消息,第二个参数为元组类型的对方的ip地址和端口信息
       # recvfrom()收到客户端发送的消息,收到的addr信息是客户端的
    
       print('客户端发送的消息解压后数据为:', data, addr) # b'haha' ('127.0.0.1', 59702)
    
       udp_server.sendto(data.upper(), addr) # 发送信息需要两个参数,一个是发送数据,一个是元组类型的对方ip地址和端口信息
       # sendto()发送消息给客户端,所以addr就是写客户端的
    
    udp_server.close()
    # 关闭链接
    
    # 注意:服务端sendto()传的ip和端口信息是客户端的,但是客户端的recvfrom()收到的ip和端口信息则是服务端的(两端可互换表达意思一样)
    from socket import *
    '''客户端'''
    
    ip_port = ('127.0.0.1', 8000)
    buffer_size = 1024
    
    udp_client = socket(AF_INET, SOCK_DGRAM)
    
    while True:
       msg = input('请输入:').strip()
       udp_client.sendto(msg.encode('utf-8'), ip_port)
       # 发送消息给服务端,那么第二个参数就写服务端的
    
       data1, addr1 = udp_client.recvfrom(buffer_size)
       # 收到服务端发送的信息,所以addr1是服务端的ip及端口信息
    
       print('服务端发送的消息:', data1, addr1)
    
    udp_client.close()
    '''tcp和udp归纳整理'''
    # tcp服务端:socket(套接字家族,tcp协议),setsocketopt(解决由于突然断开链接引起的端口被占用情况,需要3个参数),bind(元组类型的服务器ip及端口信息),listen(监听数量),accept()--->(返回结果为元组类型,第一个为链接,第二个为客户端的ip及端口信息),recv(字节数)/send(编码后的数据),colse(),close()
    
    # tcp客户端:socket(套接字家族,tcp协议),connect(元组类型的服务器ip及端口信息),send(编码后的数据)/recv(字节数),close()
    
    
    # udp服务端:socket(套接字家族,tcp协议),bind(元组类型的服务器ip及端口信息),recvfrom(字节数)--->(返回结果为元组类型,第一个为编码后数据,第二个为对方的ip及端口信息)/sendto(编码后数据,元组形式的对方IP和端口),close()
    
    # udp客户端:socket(套接字家族,tcp协议),sendto(编码后数据,元组形式的对方IP和端口)/recvfrom(字节数)--->(返回结果为元组类型,第一个为编码后数据,第二个为对方的ip及端口信息),close()
    while True: print('studying...')
  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14786500.html
Copyright © 2011-2022 走看看