zoukankan      html  css  js  c++  java
  • socket架构

    套接字基本概念

    Socket是应用层与Tcp/ip协议族通信的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个门面模式,它把复杂的tcp/ip协议族隐藏在socket接口后面,对用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。
    socket位置:在传输层和应用层之间
    套接字分为两种:

    • 基于文件型:AF_UNIX(af=address family)
    • 基于网络型:AF_INET/AF_INET6

    套接字工作流程

    tcp链接建立及释放

    backlog syn请求进入到backlog(半连接池)

    测试代码

    tcp

    服务端
    import socket
    
    ser = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #基于流式通信
    ser.bind(('127.0.0.1',8888)) #以元祖形式
    ser.listen(5) #最多多少链接,半连接池
    conn,addr = ser.accept() #接受链接和地址,建立一个tcp链接
    msg = conn.recv(1024)
    print('msg from client is ',msg.decode('utf-8'))
    msg_repl = 'replay'
    conn.send(msg_repl.encode('utf-8'))
    conn.close()
    ser.close()
    
    客户端
    import socket
    
    cli = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #基于流式通信
    cli.connect(('127.0.0.1',8888)) #以元祖形式
    # conn,addr = cli.accept() #接受链接和地址
    msg = 'hello world'
    cli.send(msg.encode('utf-8'))
    data = cli.recv(1024)
    print(data)
    # cli.close()
    
    

    udp

    服务端
    from socket import *
    ip_port= ('127.0.0.1',8080)
    buffer_size = 1024
    
    udp_server = socket(AF_INET,SOCK_DGRAM)
    udp_server.bind(ip_port)
    
    while True:
        data = udp_server.recvfrom(buffer_size)
        print(data)
    udp_server.close()
    
    客户端
    from socket import *
    ip_port= ('127.0.0.1',8080)
    buffer_size = 1024
    
    udp_server = socket(AF_INET,SOCK_DGRAM)
    
    while True:
        data = udp_server.sendto('htllo'.encode('utf-8'),ip_port)
    udp_server.close()
    
  • 相关阅读:
    关于Tortoise git汉化包装了,不管用,仍然是英文菜单的问题记录
    《EM-PLANT仿真技术教程》读书笔记
    使用java8的lambda将list转为map(转)
    mybatis动态sql中的trim标签的使用(转)
    python变量与常量内容:
    变量与常量
    计算机与操作系统小结
    编程与计算机基础
    元类
    爬虫百度图片
  • 原文地址:https://www.cnblogs.com/chrrydot/p/9827792.html
Copyright © 2011-2022 走看看