基本网络知识和初识socket
一:基本知识

  1. 网线:传输电信号
  2. 集线器:将所有连接到集线器的网络设备连通起来
  3. 交换机: 升级版的集线器
  4. 网卡:接受电信号
  5. MAC地址:物理地址: 8C-88-4B-88-B9-CC #前三位厂商编号,后三位生产流水号
  6. 单播:只发送给一台电脑
  7. 广播:发送给所有局域网内的电脑端
  8. 广播风暴:网络拥堵,信息不安全
  9.  
  10. Ip地址:
  11. IPv4 地址: 192.168.15.46 #4个点分十进制
  12. 作用:划分广播域
  13.  
  14. 例如:
  15. 192.168.15.46 #
  16. Ipv4:192.168.15.0-192.168.15.255 # 八位二进制 256个电脑
  17. Ipv6:
  18.  
  19. 192.168.0.0 - 192.168.255.255
  20. 例如一个小型办公点的地址段可以是:192.168.123.0 -- 192.168.123.255
  21.  
  22. DHCP:自动分配IP地址
  23. Arp表:保存着ip地址和mac地址对应关系
  24. Arp协议:通过ip地址获取mac地址
  25.  
  26. 子网掩码:计算两个ip地址是否属于同一网段:
  27. 255.255.255.0
  28.  
  29. ip地址:192.168.15.46 ---〉目标的ip:192.168.16.30 #192.168.16.0
  30. 两个IP地址 运算后:
  31. 11000000.10101000.00001111.00101110
  32. 11111111.11111111.11111111.00000000
  33. 11000000.10101000.00001111.00000000 #192.168.15.0
  34.  
  35. 路由器:转发消息
  36. 路由协议:计算路由转发消息的最优路径
  37.  
  38. 端口号:0 - 65535,确定电脑上的应用程序的
  39. Ip地址+端口 = 确定某个电脑上的某个应用程序

二:网络通信整个流程:以我们访问京东的网站为例子:(主要点:Ip地址+端口 = 确定某个电脑上的某个应用程序)

  1. 第一步:打开浏览器,想要请求访问京东,在地址栏输入了网址:www.jd.com。(www.jd.com是域名就是一个IP地址的名称,IP地址不好记,所有有了域名。)
  2. 第二步:先将请求信息发给了交换机,然后交给了路由器,路由发给DNS服务器,通过DNS协议去找我们要访问的京东的IP地址:
  3. 第三步:查到的京东服务器对应的IP地址之后,路由器通过路由协议找到一个路由转发的最优路径,将你的请求信息还送给这个IP地址的京东的路由器
  4. 第四步:京东的路由器发给了京东网站的服务器上
  5. 第五步:京东网站服务器按照来的时候的路径,在返回给你他自己的网站
  6. 第六步:当你打开浏览器的时候,你的电脑给你的浏览器这个运行起来的程序给了一个编号,叫做端口号,当你的电脑收到京东发送过来的消息的时候,你的
  7. 电脑通过端口号找到你的浏览器,你的浏览器拿到了京东的网站信息,然后将网站呈现在了自己的浏览器上

三:C\S 架构和B\S架构

  1. 01C\S架构(****) client server
  2. 软件C\S架构:客户端\服务端架构:京东,淘宝,今日头条,qq,微信.....
  3. 02B\S架构:浏览器(browser)\服务端>>>统一接口
  4. 硬件C\S架构: 打印机.、

四:socket初识

001:我们分别建立一个基础版的--〉服务端(server.py 文件)和一个客户端(client.py文件),让其能够互相发信息!
#server.py

  1. import socket
  2. server=socket.socket()
  3. ip_port=("192.168.xx.xx",8001)
  4.  
  5. server.bind(ip_port)
  6. server.listen() #监听
  7.  
  8. conn,addr=server.accept()
  9. from_client_msg=conn.recv(1024)
  10. print("来自客户端的消息",from_client_msg)
  11.  
  12. conn.send(b"NONO")
  13. conn.close()
  14. server.close()

服务端

  1. #client.py
  1. import socket
  2. client=socket.socket()
  3.  
  4. server_ip_port=("192.168.xx.xx",8001)
  5. client.connect(server_ip_port)
  6.  
  7. client.send(b'aaa') #接受和发送的是bytes 类型的数据
  8.  
  9. from_server_msg=client.recv(1024)
  10.  
  11. print("来自服务端的消息:",from_server_msg)
  12. client.close()

客户端

  1.  
  1. 先运行服务端文件(因为服务端需要一直开启,才能被客户端访问),再运行客户端去访问
    客户端先给服务端发送一个信息,然后受到了服务端发来的回复信息!
    002:升级版serverclient,让他们互相能一直发送信息
  1. #server.py
  2. import socket
  3. server=socket.socket()
  4.  
  5. ip_port=("192.168.xx.xx",8001)
  6. server.bind(ip_port)
  7.  
  8. server.listen()
  9.  
  10. conn,addr=server.accept()
  11.  
  12. while 1:
  13. server_msg=input("服务端:")
  14.  
  15. conn.send(server_msg.encode("utf-8")) #send消息
  16.  
  17. from_client_msg=conn.recv(1024) #1024 一次性能够接受的消息大小
  18.  
  19. print("来自客户端的消息",from_client_msg.decode("utf-8"))
  20.  
  21. #关闭通道
  22. conn.close()
  23.  
  24. #关闭socket
  25. server.close()

服务端

  1. #client.py
  2.  
  3. import socket
  4. client=socket.socket()
  5.  
  6. server_ip_port=("192.168.xx.xx",8001)
  7. client.connect(server_ip_port)
  8.  
  9. while 1: #while 循环会非常占cpu
  10. from_server_msg1=client.recv(1024) #阻塞
  11. print("来自服务端的信息:",from_server_msg1.decode("utf-8"))
  12. client_msg=input("客户端:")
  13. client.send(client_msg.encode("utf-8")) #接受和发送的是bytes 类型的数据
  14. # from_server_msg=client.recv(1024)
  15. # print("来自服务端的消息:",from_server_msg)
  16. client.close()

客户端

  同理先运行服务端,然后再运行客户端,这样两者就可以一直链接通话了!
  1.  

python学习之路---day25( 网络编程基础和初识socket)的更多相关文章

  1. python学习之路-10 网络编程之进阶

    本篇介绍内容 作用域 python类的多继承 IO多路复用 socketserver之源码剖析 多线程和多进程 作用域 if 1 == 1: name = "xxx" print( ...

  2. Python学习-第三天-面向对象编程基础

    Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...

  3. python的学习之路day7-socket网络编程

    python基础部分学习完了,时间也已经过了两个月左右,感觉没学到什么,可能是我学习之后忘记的太多了. 由于没钱买书,要是去培训就更没钱了,所以在网上找了一本书,感觉还不错,讲的比较好,比较详细. P ...

  4. Python学习(十三) —— 网络编程

    一.操作系统基础 操作系统(Operating System):OS是管理和控制计算机硬件和软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行 ...

  5. 4月18日 python学习总结 异常处理、网络编程

    一. 异常 1.什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制 那么该错误就会产生一个异常抛出来,程序的运行也随之终止 2.一个异常分为三部分: 1.异常的追踪信息 2 ...

  6. 从零开始学Python第八周:网络编程基础(socket)

    Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Soc ...

  7. 吴裕雄--天生自然python学习笔记:Python3 网络编程

    Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...

  8. 第1章 网络编程基础(3)——基本Socket通信

    服务器常用模型

  9. python学习笔记(十二)-网络编程

    本文结束使用 Requests 发送网络请求.requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到.可以说,Requests 完全满足如今网络的需求. ...

随机推荐

  1. eclipse egit(分支管理 上)

    这一章比较重要,讲述了Git比svn强大的地方,直接转载廖雪峰老师的文字,更好的理解 什么是分支 和 为什么分支git比svn做的更好 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才 ...

  2. codeforce 457DIV2 C题

    题意 你需要构造一个n个点m条边的无向有权图,要求这个图的MST中边权的和与从1到n的最短路长度都为素数 分析 可以想到这样一种贪心,在i到i+1直接连一条边,这样最短路和MST都会是同样的一些边.只 ...

  3. inux php pdo mysql 扩展

    今天在本机部署了一个pdo项目,发现一些问题,真没想到pdo mysql,不容易装啊,哈哈,我说的不容易,是因为php5.3以前版本,yum源里面根本没有.部署后就报,Undefined class ...

  4. python 输入参数解包,模块导入,接收IO输入参数

    #coding=utf-8 from sys import argv script,first,second,third = argv print "the script is=" ...

  5. 13.JOIN

    SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据 CREATE TABLE IF NOT EXISTS zz0 (number INT(11)); CREATE TABLE ...

  6. Mac anzhuangxgboost

    2. 从Github库安装XGBoost 第一步, 克隆最新的XGBoost到本地 git clone --recursive https://github.com/dmlc/xgboost 第二步, ...

  7. EZOJ #201

    传送门 分析 这个题和寿司晚宴有点像 我们知道大于$\sqrt n$的质因子最高就是一次 于是我们对所有数以他的大质数为关键字排序 设dp[i][p2][p3][p5][p7][p11][p13][0 ...

  8. Django框架 之 Form表单和Ajax上传文件

    Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...

  9. 现代C++学习笔记之二入门篇1

    现代 C++ 强调: 基于堆栈的范围,而非堆或静态全局范围. 自动类型推理,而非显式类型名称. 智能指针而不是原始指针. std::string 和 std::wstring 类型(请参见 <s ...

  10. ASP.NET伪静态配置

    一.下载URLRewriter.dll 二.在项目中添加URLRewrite的引用 三.配置webconfig 1.在<configuration>节点中添加: <configSec ...