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协议(不常用)

 

 

服务端绑定自己的地址,和端口名字,(065535之间) 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.dirnamrc:\a\b\c\666.txt”)取得文件的路径 结果:c:\a\b\c

Os.path.basenamerc:\a\b\c\666.txt”) 取得文件的名字 结果:666.txt

 

posted @ 2017-09-25 20:09  hello沃德  阅读(88)  评论(0)    收藏  举报