day19网络通信过程TCP/IC协议

网络通信过程

socket又叫套接字,指的是实现网络通信的两端。分为服务器对应的套接字和客户端对应的套接字
python 通过提供socket标准库来支持socket编程。
socket编程就是用程序实现服务器和客户端
服务器.bind(())给服务器绑定ip和端口
客户端.connect(()) 给客户端绑ip和端口
send发送 recv 接收
str.encode('utf-8') 字符串转二进制 send的时候
bytes.docode('utf-8')二进制转字符串 recv的时候
服务器发送接收的时候要用 conversation.send/recv

1.写一个socket服务器程序
import socket
#1.创建服务器对应的套接字对象(买了一个电话座机)
server=scoket.scoket()
#scoket有两个默认值参数。scoket(family=ipv4,type=TCP可靠传输)
# 创建一个基于ipv4的可靠服务器的套接字#已经有了默认值ipv4和TCP

2.绑定ip和端口(插了一根电话线-确定电话号码)
bind((ip,端口)) 参数是一个元组
ip:服务器的地址
端口: 不同的端口用来区分电脑上不同服务。取值范围是0-65535,注意0-1024属于著名端口
著名端口-->用来绑定特殊服务的端口,不要随便用
同一时间同一端口稚嫩绑定一个端口

server.bind(('10.7.156.23',32534))
  1. 监听请求(交电话费)

listen(个数)---> 需要通过数字来设置服务器一次可以处理的最大的请求个数

server.listen(666)
print('开始监听')

4.让服务器一直处于开启状态
send(data)--->发送数据
data: 需要发送的数据,要求是二进制数据(bytes)

字符串转二进制
a.str ---> bytes:
1.bytes(字符串,enconding='utf-8')
2.字符串.encode(编码方式)
#conversation,addr = server.accept
#接收客户端请求,如要一直开启就用while true循环
While True:
    conversation,addr = server.accept
   #打印请求地址
    print(addr)
    # 服务器给客户端发送数据(开始说话)
    message = input('服务器:')
    message_data = message.encode('utf-8')#输入的信息转换成二进制
    conversation.send(message_data)#发送二进制文件

5.接收客户端发送的消息

data = conversation.recv(1024)# 1024表示一次接收的数据大小
re_message = data.decode('utf-8')#将接收到的二进制文件转换成str
print(re_message)

recv(字节数) ---> 接受从客户端发送的数据,参数是用来设置一次能接收的最大字节数
返回值是接收到的数据,数据是二进制

bytes  转 字符串
str()
二进制.decode()

注意:recv方法也会阻塞线程,程序运行到这儿也会停止运行,等到对方发送消息为止
2.socket客户端
import socket
client = socket.scoket()#创建套接字对象
#连接服务器
client.connect(('10.7.156.23',32534))
#给服务器发送消息
message =input( '客户端说:')
client.send(message.encode('utf-8'))
if message == '拜拜'
    break #说拜拜让程序结束
# 接收服务器返回数据
new_message = client.recv(1024)
print(‘客户端说:’+new_message.decode('utf-8'))

3.给服务器升级(持续运行)
import scoket
server = scoket.scoket() #创建服务器
server.bind(('10.7.156.23',32534)) # 绑定ip
server.listen(199)#设置监听请求次数
# 用一个while True循环来持续运行服务器
while True:
    conversation,addr = server.accept()
    print(addr)
    while True:
            message_re =conversation.recv(1024).docode('utf-8')#接收消息,二进制转字符串
            print(''客户端%s:' % addr[0][-2:]'+message)
            message = input('服务器说:')
            conversation.send(message.encode('utf-8'))

4.接收图片的客户端
import  socket
client = scoket.scoket()
client.connect(('10.7.156.23',32534))
message = client.recv(1024) #接收到的二进制文件
data = bytes()
while message:
      data += message 
      message = client.recv(1024)
with open('.aaa.jpg','wb')as f:
          f.write(data)
print('接收完成')
#==================服务器发送文件==============
with open('.bbb.jpg''rb')as f:
      message = f.read()
      conversation.send(message)
      conversation.close()#这里要主动关闭图片文件


5.requests请求

Python没有一个标准库来支持网络请求,但目前有一个第三方库支持http请求
requests.get(url,parmas) --> 返回服务的响应
url-->请求地址
params---> 客户端给服务器发送的数据(字典){参数名:值}

import resquests
url = 'https://www.apiopen.top/satinApi?type=1&page=1'
response = requests.get(url)
# 1. 获取响应头
print(response.headers)
# 获取响应头
print(response.hearders)
# 2.拿二进制形式的响应体
data_byte = response.content
print(data_byte,type(data_byte))

# 3.拿字符串形式的响应体
data_text = response.text
print(type(data_text),data_text)

# 4.拿json格式对应的python数据
data_json = response.json()
print(type(data_byte))

image_message = resquests.get('http://img4.imgtn.bdimg.com/it/u=4097616506,16220324&fm=200&gp=0.jpg')
re_image = image_message.content# 拿到响应体的二进制
with open ('.aaa.jpg','wb') as f:
    f.write(re_image)

6.http

URL基本格式 = 协议://主机地址/路径
url协议
HTTP,超文本传输协议,访问远程的网络资源,格式是http://
是最常用的协议

特点:
简单快速。因为http协议简单,所有http服务器的程序规模小,因为通信速度很快
灵活。 http允许传输各种各样的数据
http 0.9和1.0 使用非持续连接
限制每次连接只处理一个请求,服务器对客户端的请求做出相应,马上断开连接。

通信过程

200 OK 请求成功
400 Bad Request 客户端请求语法错误,服务器无法解析
404 无法找到客户端请求的资源
500 服务器内部错误

TCP/IC协议

OSI参考模型 TCP/IC协议栈 分层
应用层 HTTP/HTTPS\(网络请求) 前三个都属于应用层
表示层 HTTP/HTTPS\(网络请求) FTP DNS
会话层 HTTP/HTTPS\(网络请求)
传输层 TCP(可靠传输)UDP(不可靠传输) 传输层
网络层 ARP IP ICMP IGMP 网络层
数据链路层 Ethernet ATM Frame Replay 数据链路层
物理层 Ethernet ATM Frame Replay 物理层

应用层:所有能产生网络流量的程序(QQ,浏览器、有道)
表示层:数据传输前的压缩、加密、确定编码方式等操作
会话层:查看木马(netstat -nb)(只要需要网络请求,就必定会建立会话)
传输层:可靠传输、不可靠传输、流量控制
网络层:负责选择最佳路径、规划IP地址
数据链路层:帧的开始和结尾、透明传输、查错校验
物理层:接口标准、电器标准

数据封装过程:应用层的上层数据到传输层加上TCP(TCP+上层数据)头再到网络层加上IP头(IP+TCP+上层数据)再到数据链路层加MAC头和FCS尾(MAC+IP+TCP+上层数据+FCS)再到物理层转换成二进制
数据解封过程正好相反。后往前一层一层的去掉添加的附加信息
在TCP/IP协议中传输层有两个协议TCP可靠传输和UDP不可靠传输
常用的是TCP可靠传输,tcp协议用于数据需要分段传输,会建立会话层,传输过程当段数据后收到客户端的确认返回才会传输下一段传输直到传输完成。UDP协议则是不需要分段传输,也不需要创建会话层
TCP协议中如果无差错就会分段传输收到确认再传输,若传输中出现错误会超时重传数据
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,021评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,657评论 18 139
  • 说明 本文 翻译自 realpython 网站上的文章教程 Socket Programming in Pytho...
    keelii阅读 2,122评论 0 16
  • 今晚入住格尔木,下午去了胡杨林,沿途全是胡杨树。格尔木属于高原大陆性气候,夏无酷暑,干燥少雨,大...
    故怀瑾阅读 194评论 1 9
  • 1234567
    yaya娃娃阅读 126评论 0 1