zhangyaqian

导航

 
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时间过长也切(降低效率)
进程与进程之间的内存空间是互相隔离的
posted on 2018-04-23 17:30  zhangyaqian  阅读(148)  评论(0编辑  收藏  举报