欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

网络通信 & 初识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发送的内容
通过上面两段代码,我们队网络编程有了一个大概的认识