2018.11.6
1 TCP 和 UDP 发送数据时的流程 *****
解释 为何TCP是可靠的 是因为发送数据后必须收到确认包
1.2.TCP模板代码
半连接池的工作原理
目前我们的程序是单线程 服务器要么处理通讯要么处理连接请求 无法同时进行
服务器
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("127.0.0.1",9999))
# 不是最大连接数 !!
server.listen(5)
while True:
c,addr = server.accept()
while True:
try:
msg = c.recv(1024).decode("utf-8")
if not msg:
c.close()
break
c.send(msg.upper().encode("utf-8"))
except BaseException:
print("客户端异常断开")
c.close()
break
server.close()
客户端
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",9999))
while True:
data = input(">>>:")
if not data:continue
client.send(data.encode("utf-8"))
msg = client.recv(1024).decode("utf-8")
print(msg)
client.close()
2 UDP的模板代码 *****
与TCP代码的区别
不需要监听 不需要接收
type参数为 SOCK_DGRAM
UDP 可以同时处理多个客户端 是因为CPU处理速度快 给人感觉像是同时处理
服务器
import socket
# 创建socket对象 指定type参数为socket.SOCK_DGRAM 表示使用UDP协议
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # datagram数据报的意思
# 绑定ip和端口
server.bind(("127.0.0.1",8888))
while True:
# 接收数据 返回一个元祖 数据和 发送方的地址
msg,c_addr = server.recvfrom(1024)
print("收到来自%s: 说:%s" % (c_addr[0] ,msg.decode("utf-8")))
# 发送数据到指定ip和端口
server.sendto(msg.upper(),c_addr)
客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # datagram数据报的意思
while True:
msg = input(">>>:")
client.sendto(msg.encode("utf-8"),("127.0.0.1",8888))
data,addr = client.recvfrom(1024)
print(data.decode("utf-8"))
3 什么是进程
正在进行(运行)的程序
在只有一个CPU的情况下
是因为有多道技术
内存被分为多个区域 存放不同的应用程序
当一个应用程序遇到了I/O操作时 操作系统会将CPU分配给其他的应用程序使用
切换的时间非常短 用户是感觉不到的
特点:
一个操作系统中可以同时存在多个进程
内部使用了多道技术 可以快速在不同进程间切换 给用户的感觉像是同时运行
进程是一个包含程序运行所需的所有资源的单位