zoukankan      html  css  js  c++  java
  • socket介绍

    socket

    一:什么是socket(套接字)

    socket是一个模块,把复杂的tcp/ip协议隐藏在socket接口后面.  位置处于应用层与tcp/ip协议通信的中间软件抽象层,是一组接口,符合socket就相当于符合了tcp/ip协议.

    socket在OSI模型中的位置

     

    二.为什么需要socket

    在osi模型中 若想实现通讯  需要打通七层结构  十分繁琐

    socket就是把传输层以下的协议封装起来,方便使用  只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

    三.socket中两种类型

    1> 基于文件类型的  AF_UNIX

    unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信

    2>基于网络类型的   AF_INET

    socket默认指定AF_INET   因为绝大多数是基于网络通讯的

    四.Python中socket

    主要分为客户端和服务器

    # 服务器版本
    #
    当成一个买手机接听电话的过程 # 接收收据可能会出错 故放在try里尝试 import socket server= socket.socket() # 买手机 server.bind(('127.0.0.1',1999)) # 插卡 指定自己地址 和 端口 默认127.0.0.1是自身地址, 端口就是一个整数 注意:这时是元祖 server.listen() # 手机监听过程 while True: client_socket,client_addr = server.accept() # 接电话 buffer_size = 1024 # 设定缓存区域 while True: try: data =client_socket.recv(1024) # 收数据 if not data: client_socket.close() # 如果没有接收到数据 意味着对方下线 就关闭通道 break print('收到了数据',data.decode('utf-8')) # 接收到的都是二进制格式 需要转化 client_socket.send(data.upper()) # 发数据 except: # 上面运行错了就运行下面的 上面没错就运行上面的下面的步骤不走了 client_socket.close() # # 如果对方下线了 那服务器也应该关闭对应的客户端对象 break
    客户端版本
    
    #  相当于买手机通话
    #  发送数据和接受数据容易出错 放在try里尝试
    
    import socket
    
    client = socket.socket()  #  买个手机
    # 不需要插卡  是系统自动分配地址的  故不用插卡操作
    
    client.connect(('127.0.0.1',1999))  # 连接到ip和端口
    
    while True:
        msg = input('输入内容(q退出)').strip()
        if msg == 'q':
            break
        if not msg:
            continue
            # 发送的顺序要和服务器相反
        client.send(msg.encode('utf-8')) #  发送数据
        print('sending')
        data = client.recv(1024)  # 接受数据
        print(data.decode('utf-8'))
    
    client.close()  #  运行完关闭通道
  • 相关阅读:
    数据库——游标
    避免全表扫描的sql优化
    聚合索引(clustered index) / 非聚合索引(nonclustered index)
    [摘抄]Python内置的字符串处理函数整理
    Web 安全渗透方面的学习路线?
    [转载]从关系型数据库到非关系型数据库
    [转载]shell脚本
    关于工具面试题
    ES6之promise
    关于vue-router总结
  • 原文地址:https://www.cnblogs.com/wakee/p/10939731.html
Copyright © 2011-2022 走看看