网络通信 & 初识socket
程序员文章站
2022-05-11 14:43:16
本节主要内容: 1.客户短\服务端架构 2.网络通信的流程 3.初识socket 一.客户端\服务端架构 客户端\服务端架构: 即Client/Server (C/S) 结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,需要安装客户端才可进 ......
本节主要内容:
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位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
查看mac地址的方法:windows下在cmd窗口输入ipconfig -all指令:下面显示的这个物理地址就是mac地址。
ip地址: 由4个点分十进制数组成,每个数对应8位二进制
关于的整个流程请点击链接查看.
三.初识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('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() #关手机
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发送的内容
通过上面两段代码,我们队网络编程有了一个大概的认识
上一篇: iOS的手势识别器
下一篇: 昨天回家路上同事们谈起滴滴乘客遇害案件