zoukankan      html  css  js  c++  java
  • day31

    今日所学

    # socket是一个接口,内部帮你封装了一堆协议
    # 导入socket模块
    import socket
    # 要找到这台电脑上的应用程序的端口和ip地址
    # 作为服务器必须明确自己的ip和端口号,并且不能经常变化
    # 参数1指定 socket类型AF_INET  表示网络类型即 ip 类型,ipv4,目前大多数的ip地址类型
    # 参数2 指定的是传输协议 SOCK_STREAM 表示TCP协议    SOCK_DGRAM 表示UDP协议
    server = socket.socket(socket.AF_INET6,socket.SOCK_STREAM)     #买电话机
    # 默认就是网络类型 TCP协议
    # server = socket.socket()
    # 无论是服务器端还是客户端都用socket
    # 为服务器绑定ip 和端口号 ip一定是本机ip,本机可能会有多个ip,用自己真实的ip
    # 正常开发中,此时就是建立连接的那个电脑的ip 和端口
    # 注意:需要参数是一个元组    端口就是普通整数
    server.bind(("127.0.0.1", 1688))         #插入手机卡

    # 开始监听1688这个端口    盯着这个端口看有没有数据过来
    server.listen()  #手机开始待机

    # 接受链接请求
    # 链接建立会返回给客户端两个参数
    # 第一个表示客户端的socket     第二个客户端的地址信息
    # accept 是一个阻塞函数,会一直等到有客户端连接过来,再继续执行
    client, addr = server.accept()   #接电话
    print(type(client))
    print(addr)
    # 收发数据
    data = client.recv(1024)
    print(data)
    import socket

    # 买个电话
    client = socket.socket()
    # 连接服务器
    # 作为客户端 ip和端口可以变化 所有系统会自动分配随机端口给客户端
    # connect本质是在进行三次握手,也是一个数据传输的过程,如果服务器没有立马响应 也会阻塞
    client.connect(("127.0.0.1", 1688))      #三次握手,  连接服务器,

    # 开始通话
    # 发送数据,因为是字符串,所以要把发送的内容需要转码成二进制
    # 发数据要给服务器,send把数据交给操作系统,后续的发送应用程序无法控制,send一般不会卡
    client.send("hello".encode("utf-8"))

    # 接收数据
    data = client.recv(1024)
    print(data)

    # 结束
    client.close()
     
    import socket
    client = socket.socket()
    # connect本质是三次握手,也是一个数据传输的过程,如果服务器没有立马响应,也会阻塞
    # 所以connect与会卡,但是不会卡太久
    client.connect(("127.0.0.1", 6667))  # 连接服务器,三次握手,相互传数据
    print("握手成功!,")
    # 收发数据,本质是把数据交给操作系统发送,一旦数据交给操作系统,以后的数据应用程序就无法控制,所以send不会卡,如果数据量很大就会阻塞
    # client.send("hello".encode("utf-8"))  # 发送数据
    # print("发送完成")
    #操作系统把数据先丢进缓存中,recv读取数据是从操作系统缓存区读取数据,
    # 如果当前还没有任何数据,就会进入阻塞,会一直等到有数据到来,再继续执行
    # try:
    #     data = client.recv(1024)  # 接受数据,给一个接受长度
    #     print("接受完成")
    #     print(data)
    # except:
     client.close()  # 结束,关机
    print("服务器强行关闭")
     
     
    import socket

    server = socket.socket()
    server.bind(("127.0.0.1", 6667))                #确认自己的ip和端口 绑定地址
    server.listen()                               #监听数据
    #accept是一个阻塞函数,会一直继续等待客户端发送数据,直到有数据进入再继续运行
    client, addr = server.accept()                 #链接    完成三次握手
    print("握手成功")
    # 收发数据,注意都是用表示客户端的socket来收发数据
    # client.send("word".encode("utf-8"))                                     #发数据
    data = client.recv(1024)
    print("客户端发来的数据",data)
    # client.close()                                         #结束传输  四次挥手,断开连接
    server.close()                                     #结束,关机关闭服务器
    print("服务器关机")
  • 相关阅读:
    Dynamic Method Binding in Delphi 动态方法绑定
    Server Memory Server Configuration Options 服务器内存服务配置选项
    最大化系统并发连接数.Windows.reg
    js一行代码解决各种IE兼容问题
    [原创]如果软件在网络磁盘中或移动磁盘中运行时需要解决 exception C0000006 异常问题
    用 ghostscript 转化PDF文件为图片 的参数设置
    GhostScript应用一例:使用GhostScript强行修改加密PDF
    Win7 Win8 Win10取不到机器码的处理办法
    WCAG
    页面被iframe与无刷新更换url方法
  • 原文地址:https://www.cnblogs.com/Fzhiyuan/p/10940374.html
Copyright © 2011-2022 走看看