zoukankan      html  css  js  c++  java
  • socket等的理解

    学习自https://www.liaoxuefeng.com/wiki/1016959663602400/1017788916649408
    socket是在客户机和服务机之间的连接。涉及到客户机和服务机两台电脑,客户机负责发送建立请求,和回收接收到的信息,而服务机要负责监控相应的端口程序,以响应请求
    根据代码来理解原理
    客户端:
    1、新建一个socket,里面得说明是符合什么连接协议,ipv4或者ipv6,在就是定义为socket传输流
    sc= socket.socket(socket.AF_INET,socket.SOCKET_STREAM)
    2、需要和什么服务器建立连接,连接的ip和端口。如百度的端口80
    sc.connect(('www.baidu.com',80))
    3、建立好连接后,客户机需要发送请求信息给服务器
    sc.send('GET HTTP/1.1/ HOST: www.baidu.com Connection:close ')---- 表示回车, 换行 表示结束
    4.执行完前面三步,sc里面已经有服务机返回的信息了。
    建立一个用于接收的容器,并把内容写入tagertHtml内
    list = []
    targetHtml= 'D: argetHtml.html'
    while True:
    data = sc.recv(2048)
    if data:
    list.append(data)
    else:
    break
    d = b''.join(list)#将list数据转换为二进制数据(很重要)
    with open(targetHtml,'wb') as f:
    f.write(d)

    客户机:
    sc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sc.bind('127.0.0.1',80)
    sc.listen(5)
    print('waiting for connection')
    while True:
    socket,addr =sc.accept()#接收到socket和addr
    #创建线程去完成任务
    t = threading.Thread(target=tcplink,args(socket,addr))
    t.start()

    def tcplink(socket,addr):
    socket.send(b'welcome')
    while True:
    data = socket.recv(1024)
    time.sleep(1)
    if not data or data.decode('utf-8') == 'exit':
    break
    socket.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
    socket.close()
    print('conect close')

  • 相关阅读:
    输入框只能输入正数且保留小数后2位数字,正则
    vscode安装ESlint配置
    kubreretes && docker 模块
    python3安装sqlite3库
    dokcerfile 制作Msql镜像
    前端模板
    Python SMTP发送邮件
    k8s-api
    openpyxl
    k8s mysql主从
  • 原文地址:https://www.cnblogs.com/hbym/p/11663475.html
Copyright © 2011-2022 走看看