本节主要内容:

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是实现网络编程的工具, 以下是两段简单的代码.

import socket
#创建一个socket对象
server = socket.socket() #相当于创建了一部电话
ip_port = ('192.168.111.1',8001) #创建一个电话卡
server.bind(ip_port) #插上电话卡
server.listen(5) #监听着电话,我能监听5个,接到一个电话之后,后面还能有四个人给我打电话,
但是后面这四个人都要排队等着,等着我第一个电话挂掉,再来第6个的时候,第六个人的手机会报错
print('')
#等着别人给我打电话,打来电话的时候,我就拿到了和对方的这个连线通道conn和对方的电话号码addr
conn,addr = server.accept() #阻塞住,一直等到有人连接我,连接之后得到一个元祖,里面是连线通道conn和对方的地址(ip+端口)
print('')
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() #关手机
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发送的内容
通过上面两段代码,我们队网络编程有了一个大概的认识

网络通信 & 初识socket的更多相关文章

  1. python 网络内容: 初识socket

    一 C\S架构,客户端服务端架构 客户端(client) : 享受服务端提供的服务 服务端(server) : 给客户端提供服务 B\S 浏览器和服务端 B(browser) 二 网络通信的整个流程( ...

  2. python学习之路---day25( 网络编程基础和初识socket)

    基本网络知识和初识socket一:基本知识 网线:传输电信号 集线器:将所有连接到集线器的网络设备连通起来 交换机: 升级版的集线器 网卡:接受电信号 MAC地址:物理地址: 8C-88-4B-88- ...

  3. day9学python 类+异常处理+初识socket

    类+异常处理+初识socket 类的特点: 1.封装-同其他语言 2.继承 py2 经典类深度优先 新式类类名(object)广度优先py3 都是广度优先 3.多态-python本身无多态 可用方法调 ...

  4. Android 网络通信之Socket

    Android 网络通信之Socket 应用软件的网络通信无非就是Socket和HTTP,其中Socket又可以用TCP和UDP,HTTP的话就衍生出很多方式,基础的HTTP GET和POST请求,然 ...

  5. 网络通信之Socket与LocalSocket的比较

    Socket与LocalSocket都可以实现网络通信,两个有什么区别呢? LocalSocket其通信方式与Socket差不多,只是LocalSocket没有跨越网络边界. 于是,思考到一个问题:a ...

  6. 1、初识socket

    经过近一个半月的学习我们已经度过了python基础的阶段,今天我们开始学习python网络编程,没有难以理解的逻辑,更注重的是记忆. 对网络协议和基础没有概念的可以在阅读本文前预习计算机基础3.网络协 ...

  7. 28、初识socket(subprocess模块)

    经过近一个半月的学习我们已经度过了python基础的阶段,今天我们开始学习python网络编程,没有难以理解的逻辑,更注重的是记忆. 本篇导航: 客户端/服务器架构 scoket与网络协议 套接字 基 ...

  8. Android网络通信之Socket

    在移动APP开发中.网络通信数据传输是必定存在的.移动APP离开了网络通信数据传输的功能方式,就好比一潭死水,永远都 是原来的样子. 提到网络通信传输数据.首先出如今程序猿脑海中的是HTTP协议传输, ...

  9. python中的网络通信,socket、select、selectors、socketserver

    楔子 网络通信用于获取一个算法在本地运行所需的数据,还可以共享信息实现分布式处理,另外可以用来管理云服务. python的标准库提供了一些模块来创建网络服务以及访问现有服务ipaddress模块提供了 ...

随机推荐

  1. Linux基础命令---pgrep

    pgrep pgrep指令可以按名字或者其他属性搜索指定的进程,显示出进程的id到标准输出. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedo ...

  2. django -- 修改admin 密码问题

    1.python manage.py shell 2.from django.contrib.auth.models import User 3.user=User.objects.get(usern ...

  3. GUI相应鼠标事件

    function varargout = GUI18(varargin) % GUI18 MATLAB code for GUI18.fig % GUI18, by itself, creates a ...

  4. 使用github管理Eclipse分布式项目开发

    使用github管理Eclipse分布式项目开发 老关我在前面的博文(github管理iOS分布式项目开发)中介绍了github管理iOS分布式开发,今天老关将向大家介绍使用github管 理Ecli ...

  5. Django模板系统 运算

    记下来,省得每次google 过滤器,变量的显示形式的改变 一.形式:小写 {{ name | lower }} 二.串联:先转义文本到HTML,再转换每行到 <p> 标签 {{ my_t ...

  6. Golang并发编程中select简单了解

    select可以监听channel的数据流动select的用法与switch语法非常类似,由select开始的一个新的选择块,每个选择条件由case语句来描述 与switch语句可以选择任何使用相等比 ...

  7. Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例

    Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例 一.快速上手 1,配置文件 (1)pom包配置 pom包里面添加jpa和thymeleaf的相关包引用 ...

  8. 如何成为一名合格的CTO?(转)

    不会走出去公众演说的的攻城狮不是好CTO. 本文来源于微信公众号“线性资本”(ID:LinearVenture) 成为一名合格 CTO 我们投过很多技术型的公司,对于什么是合格的 CTO 有过自己的一 ...

  9. nginx负载均衡fair方式分发

    fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小.加载时间长短智能的进行负载均衡. 这算是没有安装fair的情况 [root@localhost sbin]# ./nginx ...

  10. AnswerOpenCV一周佳作欣赏(0615-0622)

    一.How to make auto-adjustments(brightness and contrast) for image Android Opencv Image Correction i' ...