zoukankan      html  css  js  c++  java
  • 23 Apr 18 基于UDP协议通信的套接字 进程

    23 Apr 18
    一、基于TCP协议的套接字通信(无并发效果)
    #阻塞: 程序停住了
    服务端:
    import socket
     
    server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server.bind(('127.0.0.1',8080))
    server.listen(5)  # listen接收客户端发来的连接请求
     
    while True:
        conn,client_addr=server.accept()
        print(client_addr)
     
        while True:
            try:
                data=conn.recv(1024)
                if not data:break # 针对linux系统
                conn.send(data.upper())
            except ConnectionResetError:  #linux系统在单方面关闭连接时不会报ConnectionResetError(windows系统),会receive空
                break
        conn.close()
     
    server.close()
    客户端:
    import socket
     
    client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    client.connect(('127.0.0.1',8080))
     
    while True:
        msg=input('>>>: ').strip()
        if not msg:continue
        client.send(msg.encode('utf-8'))
        data=client.recv(1024)
        print(data.decode('utf-8'))
     
    client.close()
     
    二、基于UDP协议通信的套接字
    TCP(流式协议):可靠性高。会因为网络原因丢包,但只有在一端收到另一端发来的ack确认信息才会将信息在内存中删除,如果发现丢包(一段时间内没有回复)会将信息再发一份。TCP会存在粘包问题,收与发可以不是对应的。必须先启动服务端,否则报错。
    UDP(数据包协议):可靠性低。信息一旦发出即在内存中删除,如果发生丢包,信息即丢失。UDP效率高速度快的主要原因,一是因为不建连接,二是因为接受后不会确认。 UDP没有粘包问题,收与发一一对应。 如果发hello,但收一个字符,在windows系统中会报错;在linunx系统中不报错,只接收h。
    并行:(真正意义上的)同时运行;并行属于并发
    并发: 看起来是同时运行就可以了
     
    服务端:
    import socket
     
    server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 数据报协议
    server.bind(('127.0.0.1',8080))
     
    while True:
    client_data,client_addr=server.recvfrom(1024)
    #保持UDP稳定(丢包少)的最大接受字节为512,所以这里一般设为1024
        print(client_data)
        msg=input('回复%s:%s>>>:' %(client_addr[0],client_addr[1]))
    server.sendto(msg.encode('utf-8'),client_addr)
     
    客户端:
    import socket
     
    client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 数据报协议
     
    while True:
        msg=input('>>>: ').strip()
        client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
        res,server_addr=client.recvfrom(1024)
        print(res.decode('utf-8'))
    #因为UDP不需提前建连接,不用等到一个客户端退出后另一个才能交互;几个客户端都可以和服务端交互。服务端还是一个个服务,但因为处理速度快,会给用户一种并发的感觉。
     
    URL地址: http://www.cnblogs.com/linhaifeng/articles/6817679.html
    http: #浏览器(客户端套接字)使用的协议
    www.cnblogs.com             #域名
    www.cnblogs.com:80         #省略:80,80为端口,一般服务端端口默认为80
    linhaifeng/articles/6817679.html  #路径
     
    DHCP服务器: 每台电脑自带的,用来配IP,其端口默认67
    DNS服务器: 每台电脑自带的, 用来将域名转成IP,其默认端口53
     
    用浏览器访问某个URL,本质是连接服务器,将其上的文件打开并下载到本地
    a、   浏览器客户端套接字 –– UDP –– DNS服务端套接字,将域名解析成IP返回
    b、   浏览器客户端套接字 –– TCP –– Web服务端套接字,将文件下载到本地
    常用服务器软件:nginx,httpd
     
    DNS查询为迭代查询
    一般会现在本地DNS查找,如果找不到会在同级DNS查找,若还找不到需要从根DNS服务器逐级问下来(迭代查询);后续解释本地DNS代劳。
    www.cnblogs.com.
    .      #跟域名       #13个跟服务器(美9日1欧3),受限于UDP稳定性
    com   #顶级域名
    cnblogs  #二级域名    #二级域名需去顶级域名中买
    www    #二级域名的主机名

    三、进程
    #串行: 一个一个的运行
    1、什么是程序?什么是进程?
        程序说白了就是一堆文件
        进程就是一个正在执行的过程/程序,所以说进程是一个抽象的概念。这个概念起源操作系统
     
    2、什么是操作系统
        定义:操作系统是位于计算机硬件与应用软件之间,用于协调、管理、控制计算机硬件与软件的资源的一种控制程序
     
    3、操作系统的两大作用:
        1、把复杂丑陋的硬件操作都封装成美丽的接口,提供给应用程序使用
        2、把进程对硬件的竞争变的有序
     
    4、多道技术(单个CPU在多个程序中切换以实现并发)
        多道的产生背景是想要在单个cpu的情况下实现多个进程并发执行的效果
        a、空间上的复用 (多道程序复用内存的空间)
        b、时间上的复用  (多道程序复用CPU时间)
        
        cpu遇到IO操作要切换(提升效率)
        一个进程占用cpu时间过长也切(降低效率)
    进程与进程之间的内存空间是互相隔离的
  • 相关阅读:
    linux开机自动挂载NTFS-WINDOWS分区
    s3c6410学习笔记-烧写uboot+构建文件系统
    C++静态库与动态库(简介)
    linux下gmplayer安装(亲测OK!)
    得到IP包的数据意义(简单实现例子)
    IP校验和
    汇编三个数选最大
    单链表练习
    汇编写下strcpy
    排序好后写入文件
  • 原文地址:https://www.cnblogs.com/zhangyaqian/p/py20180423.html
Copyright © 2011-2022 走看看