9月27日学习内容整理:基于UDP协议的socket,并发编程的理论基础

一、UDP的socket

1、udp是无连接的,也不需要回应包,比TCP效率高,但数据可能不可靠

注意udp可以真正做到稳定正确传输的只到512字节

2、程序

服务端仍需要绑定IP和端口,但是不需要监听和接受连接,客户端也不需要建立连接(connect)

客户端发送时命令变为   : sendto(消息,(服务端的IP,端口号))  意思是往哪发

     重要重要重要:::::注意发送的是整个元组,必须先传消息,再传服务端的IP和port

服务端接受时命令变为  :  ret=recvfrom(字节数)  这里的ret 就是发送传过来的整个元组,第一个元素就是消息,而第二个元素就变成了客户端的IP和port

服务端再发送时命令为:  sendto(要返回的消息,ret[1])  这里的ret[1] 就是往客户端的IP和port发

客户端再接受是命令:recvfrom(字节数)  同样的这里就会收到服务端传来的整个元组,第一个元素是返回的消息,第二个元素就变成了服务端的IP和port

3、启动顺序:udp没有固定的启动顺序,但是如果先启动客户端,传递的数据就有可能丢失,所以一般还是先启动服务端

4、udp是没有粘包现象的:udp可以主动包装数据头部,不用人为的去包装

若接收量比实际数据量小,那么剩余的数据就会被丢弃,不会像tcp那样会暂时放在内存中

 

服务端:

from socket import *
import os
print(os.getpid())
server=socket(AF_INET,SOCK_DGRAM)
server.bind(('127.0.0.1',8080))
while True:
    data,client_addr=server.recvfrom(1024)
    server.sendto(data.upper(),client_addr)
server.close()

 

客户端:

from socket import *
client=socket(AF_INET,SOCK_DGRAM)
while True:
    client.sendto(b'hello',('127.0.0.1',8082))
    data,server_addr=client.recvfrom(1024)
    print(data.decode('utf-8'))

 

二、并发编程的理论基础

1、进程:就是指正在运行的程序。进程是操作系统的核心概念

2、操作系统的作用

(1)概念:本质上也是软件,是用来管理控制计算机硬件资源和软件资源的控制程序

(2)组成:内核态:处理硬件资源

          用户态:为用户提供多种接口来使用系统的功能

(3)作用:为应用程序提供良好的调用硬件资源的接口

          将应用程序对硬件的竞争变得有序化

3、多道技术

(1)由来:为了解决多个应用程序对统一资源竞争的有序调度问题(针对单核,实现并发)

补充:现在的主机一般都是多核,当一个应用程序被重新调度时操作系统会给它分配其中一个cpu继续运行

(2)解决办法:多路复用,包括空间复用和时间复用

空间复用:多个程序同时占用内存,但是每个程序之间一定要分割相互独立(硬件方面解决),否则程序和程序内存之间可以相互影响这样是很不安全不稳定的

时间复用:多个程序复用一个cpu时间片,当某个程序等待输入输出时或者运行时间过长(这个时间由操作系统说了算),cpu会切到另一个程序继续执行,若这个程序也遇到等待输入输出或者时间过长,cpu同样会切到另一个程序执行,等到某一程序完成输入输出cpu就会切到这个程序继续执行。以此类推

因为cpu切换的时间非常非常短,用户是很难感知到的,所以使用者实际上是觉得多个程序是并行的,同时执行的

 

posted @ 2017-09-27 15:13  九二零  阅读(92)  评论(0编辑  收藏  举报