前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络通信 & 初识socket

网络通信 & 初识socket

作者头像
py3study
发布2020-01-22 22:21:57
5580
发布2020-01-22 22:21:57
举报
文章被收录于专栏:python3

本节主要内容:

1.客户短\服务端架构

2.网络通信的流程

3.初识socket

一.客户端\服务端架构

客户端\服务端架构:

Client/Server (C/S) 结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,需要安装客户端才可进行管理操作。

客户端和服务器端的程序不同,用户的程序主要在客户端,服务器端主要提供数据管理、数据共享、数据及系统维护和并发控制等,客户端程序主要完成用户的具体的业务。

B\S架构:

Browser/Server (浏览器/服务器) 结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现。

客户端基本上没有专门的应用程序,应用程序基本上都在服务器端。由于客户端没有程序,应用程序的升级和维护都可以在服务器端完成,升级维护方便。由于客户端使用

浏览器,使得用户界面“丰富多彩”,但数据的打印输出等功能受到了限制。为了克服这个缺点,一般把利用浏览器方式实现困难的功能,单独开发成可以发布的控件,在客户端利用程序调用来完成.

软件C\S架构:客户端\服务端架构:京东,淘宝,今日头条,qq,微信.....

B\S架构:浏览器(browser)\服务端>>>统一接口,例: 微信上的小程序

硬件C\S架构: 打印机.

 二.网络通信的流程

网络通信中的一些基本概念: 

网线:传送电信号

网卡: 提供网络接口,接收电信号

MAC地址: 长度为48位二进制, 通常由12位16进制数表示(前六位是厂商编号, 后六位是流水线号), 每块网卡出厂时都被烧制了全球唯一的mac地址.

Ethernet规定接入Internet的设备都必须具备网卡, 发送端和接收端的地址便是网卡的地址.

查看mac地址的方法:windows下在cmd窗口输入ipconfig -all指令:下面显示的这个物理地址就是mac地址。

集线器:将所有连接到集线器的网络设备连通起来

交换机: 升级版的集线器

路由器:用来转发消息

路由协议:用来计算转发消息的最优路径

IP地址: 互联网协议地址, 它是IP协议提供的一种统一的地址格式, 它为互联网上的每一个网格和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异.在IPv4里有32位二进制数组成, 通常被分割为4个8位二进制数, 由四个点分十进制数表示.

DHCP服务: 是一个局域网的网络协议, 使用UDP协议工作, 用于内部网络自动分配IP地址

子网掩码: 格式与IP地址一样, 将某个IP地址划分成网络地址和主机地址两部分, 用来判断两个IP地址是否在一个网段.1表示网络地址, 0表示主机地址.

网关: 一个网络通向其他网络的IP地址, 即路由器的IP地址

DNS: 进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器

广播: 将源MAC地址,目标MAC地址及信息通过交换机和路由器发送给局域网内的所有其他设备

ARP协议: 地址解析协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址.

网络通信的流程:

关于网络通信的整个流程请点击链接查看.

三.初识socket

socket是实现网络编程的工具, 以下是两段简单的代码.

代码语言:javascript
复制
import socket
#创建一个socket对象
server = socket.socket()  #相当于创建了一部电话
ip_port = ('192.168.111.1',8001) #创建一个电话卡
server.bind(ip_port) #插上电话卡
server.listen(5) #监听着电话,我能监听5个,接到一个电话之后,后面还能有四个人给我打电话,
但是后面这四个人都要排队等着,等着我第一个电话挂掉,再来第6个的时候,第六个人的手机会报错
print('11111')
#等着别人给我打电话,打来电话的时候,我就拿到了和对方的这个连线通道conn和对方的电话号码addr
conn,addr = server.accept()  #阻塞住,一直等到有人连接我,连接之后得到一个元祖,里面是连线通道conn和对方的地址(ip+端口)
print('22222')
print(conn)
print('>>>>>>>>>',addr)
while True:
    from_client_data = conn.recv(1024) #服务端必须通过两者之间的连接通道来收消息
    from_client_data = from_client_data.decode('utf-8')
    print(from_client_data)
    if from_client_data == 'bye':
        break
    server_input = input('明威说>>>>:')
    conn.send(server_input.encode('utf-8'))
    if server_input == 'bye':
        break
conn.close() #挂电话
server.close() #关手机
代码语言:javascript
复制
import socket
import time

client = socket.socket()
server_ip_port = ('192.168.111.1',8001)

client.connect(server_ip_port)

while True:
    client_input = input('小文说>>>>:')
    client.send(client_input.encode('utf-8')) #给服务端发送消息
    if client_input == 'bye':
        break
    from_server_data = client.recv(1024)

    print('来自服务端的消息:',from_server_data.decode('utf-8'))
    if from_server_data.decode('utf-8') == 'bye':
        break
client.close() #客户端挂电话

 注意: 先运行server,然后再运行client,然后你会发现client这个文件再输出台的地方让你输入内容,你输入一个内容然后回车,你会发现server那边的控制台就输出了以client发送的内容

通过上面两段代码,我们队网络编程有了一个大概的认识。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档