1 加入链接循环的套接字服务端

1.1 服务端


''' 2.1 基于文件类型的套接字家族
套接字家族的名字:AF_UNIX
unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 2.2 基于网络类型的套接字家族
套接字家族的名字:AF_INET (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET) ''' import socket
#实例化得到一个对象
#type=socket.SOCK_STREAM TCP服务端
#type=socket.SOCK_DGRAM UDP服务端
server=socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) # 绑定地址和端口
server.bind(('127.0.0.1',80)) # listen:监听 server.listen(1) # 等待用户连接
print('开始等待客户端连接了')
while True:
sock,addr=server.accept() print(sock)
print('客户端的地址是:',addr) data=sock.recv(1024)
print(data) # 这不是字符串的upper
sock.send(data.upper()) sock.close()
server.close()

1.2 客户端

import socket

client=socket.socket()
client.connect(('127.0.0.1',80)) client.send('sb'.encode('utf-8')) data=client.recv(1024)
print(data) client.close()

2 加入通信循环的套接字服务端

2.1 服务端

import socket
server=socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) server.bind(('127.0.0.1',81)) server.listen(1) print('开始等待客户端连接了')
while True: sock,addr=server.accept()
print(sock)
print('客户端的地址是:',addr) # 等待客户端发送过来的数据,如果客户端没有发送数据,会一直等着
while True:
try:
data=sock.recv(1024)
if len(data)==0: # 这个表示客户端正常断开了,结束通信循环
break
print(data.decode('utf-8'))
sock.send(data.upper())
except Exception as e:
print(e) #客户端非正常断开,需要异常捕获
break sock.close()
server.close()

2.2 客户端


import socket client=socket.socket()
client.connect(('127.0.0.1',81)) while True: input_data=input('请输入发送给客户端的内容(输入q退出):') if input_data=='q':
break
client.send(input_data.encode('utf-8')) data=client.recv(1024)
print(data.decode('utf-8')) client.close()

3 基于UDP的套接字客户端和服务端

3.1 服务端

import socket

# udp的服务端
server = socket.socket(type=socket.SOCK_DGRAM) # 监听地址和端口
server.bind(('127.0.0.1', 82)) # 不需要listen,直接建立链接
print('等待客户端发送数据:')
while True:
#recvfrom回返回数据和客户端的地址
data,addr = server.recvfrom(1024)
print(data)
print(addr)
server.sendto(data.upper(), addr) server.close()

3.2 客户端

import socket

client=socket.socket(type=socket.SOCK_DGRAM)
client.sendto(b'sb',('127.0.0.1',82))
# data,addr=client.recvfrom(1024)
# data,_=client.recvfrom(1024)
data=client.recv(1024)
print(data)
# print(addr) client.close()

4 操作系统发展史

1 手工操作——穿孔卡片
-用户独占全机
-CPU的利用不充分
2 批处理
-把一个操作整个写到磁带中,以后要进行这个操作,直接拿着磁带,读入即可
-脱机批处理
-联机批处理 3 多道程序系统
-当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序
-各道程序轮流地用CPU,并交替运行
4 分时系统
-多个程序在运行,时间片的概念,cpu执行完固定的时间,就会转去另一个程序
5 通用操作系统
多道批处理系统,分时 io操作:(统统不占用cpu)
键盘输入,从硬盘拿数据,从网络加载数据---》都叫输入
显示在显示器,写到硬盘,从网络发送数据--->都叫输出

5 进程基础

狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。

广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元

# 进程是资源分配的最小单位,线程是cpu执行的最小单位
#一个程序运行,最少有一个进程
#一个进程里最少有一条线程 # 进程和程序的区分
程序可以作为一种软件资料长期存在,而进程是有一定生命期的。
程序是永久的,进程是暂时的。 # 进程的状态()
-就绪态:可以被cpu调度执行了,还没有执行,排着队
-运行态:在cpu中运行,正在运行(如果到了时间片,也会被调度出去,调度出去的程序是就绪态)
-阻塞态:io操作,把数据加载到内存中

6 并发和并行

并发:你在跑步,鞋带开了,停下跑步,系鞋带,系完以后,继续跑步,在一个时间段内来看,你干了多个事
-单核下的并发
并行:你在跑步,你用随身听在听着,同一时刻,在干多个事
-只有多核才涉及到并行

7如何开启多进程

from multiprocessing import Process

#如果在win下开多进程,必须写main,否则报错
import time
def wirte_file(s): time.sleep(5)
with open('a.txt','a') as f:
f.write(s)
f.write('\n') if __name__ == '__main__':
time.sleep(5)
# wirte_file()
# 开启多进程的第一个方式
p=Process(target=wirte_file,args=['lqz is nb'])
# 执行该进程
p.start() # 又开了一个进程
p1 = Process(target=wirte_file,args=['egon is dsb'])
# 执行该进程
p1.start()

day17.网络编程2+进程的更多相关文章

  1. python网络编程(进程与多线程)

    multiprocessing模块 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程. multiproce ...

  2. day30 网络编程 之进程,线程,协程

    进程点进去 线程点进去 协程点进去 什么是进程 进程(有时称为重量级进程)是一个执行中的程序.每个进程都拥有自己的地址空间.内存.数据栈以及其他用于跟踪执行的辅助数据.同一个程序执行两次,属于是两个不 ...

  3. Python网络编程(进程通信、信号、线程锁、多线程)

    什么是进程通讯的信号? 用过Windows的我们都知道,当我们无法正常结束一个程序时, 可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢? 同样的功能在Linux上是通过生成信号和捕获信号来实 ...

  4. Python 之网络编程之进程总体概要

     一: 进程的概念:(Process) 进程就是正在运行的程序,它是操作系统中,资源分配的最小单位. 资源分配:分配的是cpu和内存等物理资源 进程号是进程的唯一标识 同一个程序执行两次之后是两个进程 ...

  5. UNIX网络编程——僵尸进程

         在fork()/exec()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进 ...

  6. python网络编程之进程论

    标签(空格分隔): 进程 什么是进程: 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu; 进程与程序的区别: 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程 注意: 需要强调的 ...

  7. python网络编程之进程

    一.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实 ...

  8. Python网络编程(进程池、进程间的通信)

    线程池的原理:        线程池是预先创建线程的一种技术.线程池在还没有任务到来之前,        创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态,        即均为启动,不消 ...

  9. C#网络编程之进程管理

    这里是视频讲解地址: 这里是代码: using System; using System.Collections.Generic; using System.Linq; using System.Ne ...

随机推荐

  1. redux-devtools-extend

    如果不打算用redux-thunk import { createStore, compose} from 'redux'; import reducer from './reducer' const ...

  2. 答不上的JUC笔试题

    1:有一个总任务A,分解为子任务A1 A2 A3 ...,任何一个子任务失败后要快速取消所有任务,请写程序模拟. 「请寻求最优解,不要只是粗暴wait()」 本题解题思路:Fork/Join 通常使用 ...

  3. 关于电脑硬盘的二三事(SATA接口)

    @ 目录 前言 接口分类 SATA3接口 机械硬盘 机械硬盘的特点和主要参数 西部数据机械盘分类 绿·蓝·黑盘 红盘 紫盘 金盘 希捷机械盘分类 酷狼 酷鱼 酷鹰 银河 SATA3接口的固态硬盘 固态 ...

  4. python爬虫模拟登录验证码解决方案

    [前言]几天研究验证码解决方案有三种吧.第一.手工输入,即保存图片后然后我们手工输入:第二.使用cookie,必须输入密码一次,获取cookie:第三.图像处理+深度学习方案,研究生也做相关课题,就用 ...

  5. HTTP头Content-Type类型记录

    默认发POST格式 Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlen ...

  6. 【转载】几张图轻松理解String.intern()

    出处:https://blog.csdn.net/soonfly/article/details/70147205 在翻<深入理解Java虚拟机>的书时,又看到了2-7的 String.i ...

  7. HDOJ-3746(KMP+最小循环结)

    Cyclic Nacklace HDOJ-3746 本题还是使用KMP算法,需要使用到前缀数组 利用前缀数组计算最小循环节:即t=n-pi[n-1]. 最后输出还需要的珠子,当然还有判断什么时候输出为 ...

  8. HDOJ-3038(带权并查集)

    How many answers wrong HDOJ-3038 一个很好的博客:https://www.cnblogs.com/liyinggang/p/5327055.html #include& ...

  9. 五十:代码审计-PHP无框架项目SQL注入挖掘技巧

    代码审计教学计划: 审计项目漏洞Demo->审计思路->完整源码框架->验证并利用漏洞 代码审计教学内容: PHP,JAVA网站应用,引入框架类开发源码,相关审计工具及插件使用 代码 ...

  10. 漏洞复现-CVE-2016-4437-Shiro反序列化

        0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场)(兼顾反弹shell的攻击机) 0x01 影响版本 Shiro <= ...