day29网络编程(套接字&循环)

五层协议 应用层(基于操作系统) 传输层 网络层 数据链路层 物理层(发送电信号)

没一台电脑都有独一无二的网卡
发布广播 ,只有符合网卡地址的能接收

圆圈是局域网 方框是计算机 计算机发布消息暂时只能在局域网内

获取目标mac 可以获取mac地址(独一无二)

0-65535
0-1024系统在用
后面的端口可以使用

图上诠释了Tcp协议
三次握手的过程:
客户端向服务端发送请求syn =1 (发送请求),seq =x(请求表示)
服务端收到请求给了回应ack = 1+k ,并且向客户端发送请求syn =1 ,seq = y
客服端收到请求回应ack =1 + y 给服务端。
此时完成TCP协议 双方可以在在这条线路上互发信息。
Tcp协议必须在对方发送过来确认信息才会删除存在内存的信息(安全,稳定)


4次挥手过程 中间不能省略
谁先发送完毕谁先断链接
套接字

AF_INET 基于网络通信
SOCK_STREAM 流 也是TCP协议
SOCK_DGRAM 数据爆协议 UDB协议(不常用)

服务端绑定自己的地址,和端口名字,(0,65535之间) 1024以前不要用,系统用的

listen()表示最大挂起的连接数
accept()等待客户端发来的信息

若与客户端发生连接,那么这个元组的第一项是服务端的给客服端发送消息的依据。可以提取出来将进行与客户端的交流

可以分离为两个元组,
Conn表示服务端拿到的传输线路
Addr是代表着客户端ip 和端口

服务端先接收客户端发送的消息
基于那条路径conn.recv(1024)最大接收1024个字节
Conn.send(data.upper()) 发送消息给客户端

客户端先连接到服务端的ip和端口
客户端先建立AF_INIT网络连接协议,流,SOCK_STREAM TCP协议
基于建立的协议发起连接connect(服务端ip地址,服务端端口)
(发起连接后服务端会收到客户端的连接协议,phone.accept(),打印出得到一个大
元组,里面包含基于传输的线路和ip、客服端端口。服务端依据传输的线路做连接)客户端依据建立的协议做连接,
也可以理解为客服端只给一个服务端线路做连接可以直接操作,服务端是可以跟无数的客户端做连接,必须的按照每条线路分别连接。

如果在关闭连接的时候,有时候系统不能把端口完全关闭,所有在下一次运行的时候,会出现端口占用的情况,为了解决此类问题,
就要在服务端绑定ip,端口前加
Phone.setsockopt(socket.SOL_SOCKET,socket.SO_RESUADDR,1)

这是一个服务端的循环,这个服务端可以循环接收不同客服端的连接,但是只能一个一个循环,等学习并发概念就能同时处理多个客服端的反馈。

客户端设置循环的输入,可以循环向服务端反馈数据。

Os.path.getsize(filename) 获取文件的大小

Os.path.dirnam(r“c:\a\b\c\666.txt”)取得文件的路径 结果:c:\a\b\c
Os.path.basename(r“c:\a\b\c\666.txt”) 取得文件的名字 结果:666.txt

浙公网安备 33010602011771号