网络编程
1. 目标:编写一个C/S架构的软件
    C/S: Client(用户端)--------基于网络----------Server(服务端)
    B/S: Browser-------基于网络----------Server(服务的)
2. 服务端需要遵循的原则:
    1. 服务端与客户端都需要有唯一的地址,但是服务端的地址必须固定/绑定
    2. 对外一直提供服务,稳定运行
    3. 服务端应该支持并发
3. 网路
    网络建立的目的是为数据交互(通信)
    如何实现通信:
        1. 建立好底层的物理连接介质
        2. 有一套统一的通信标准,称之为互联网协议
4. 互联网协议:就是计算机界的英语
    OSI七层协议
    ip+mac可以标识全世界范围内独一无二的一台计算机的位置
    port可以标识一台计算机之上唯一的一个基于网络通信的应用软件
    ip+mac+port:可以标识全世界范围内独一无二的一个应用软件(基于网络通信)

IP地址分成两部分

  • 网络部分:标识子网(子网掩码)
  • 主机部分:标识主机(ip地址)
  • 172.16.10.2:10101100.00010000.00001010.000000010   (ip)

    255255.255.255.0:11111111.11111111.11111111.00000000  (掩码)

  • 172.16.10.0      (局域网地址)
  • 都为1取1,其他取0

Arp协议解析IP得到子网地址(进而获取对方ip的mac地址)

局域网的ip(自动分配,动态的),mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址

两个ip子网地址一样:同一局域网>>>以太头(原mac,fffff?) ip头(ip1 ip2 )  数据----通过交换机---->每台机器发一份,只有ip为ip2的机器响应并返回mac

        不一样:不同局域网>>>以太头(原mac,fffff?) ip(ip1 路由器ip)头 端口头 数据-----通过交换机----->每台发一份,路由器(网关默认第4部分为1)响应,返回mac1

                以太头(mac1路由,fffff?)ip(ip路由1,ip2子网)-----路由协议------>返回ip2子网,路由mac2

                以太头(mac2路由,fffff?) ip(ip路由2,ip2)---------通过交换机--------->每台发一份,ip为ip2的响应返回mac

tcp协议:

可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

以太网头 ip 头               tcp头               数据                                                    

udp协议:

不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

以太网头 ip头                      udp头                            数据                                           

                

一、其他
1、互联网协议,可看作是一个安装在计算机上的包(计算机界的英语,通用的标准)
2、交换机:有mac地址学习功能
3、ARP(地址解析协议),可将IP地址转成mac地址,mac地址转成IP地址
4、IP+端口可锁定一架计算机上的某个应用程序
5、IP 和子网掩码-》局域网地址(子网地址)
6、 TCD又称好人协议,可靠协议,需要三次握手建立链接
7、标志位:sgn=1请求信息,ack=1 确认信息,seq=’ ’序列号,ack=1+x(序列号)
8、在创建链接时如果并发少,基本看不多SYN—REVD。但如若受到洪水攻击(高并发)系统会出现SYN—REVD状态
9、TCD需要四次挥手以断链接。谁先发完信息,谁先发出断链接请求。通常是SERVER端先发出,但不一定。
10、fin=1 断链接请求,ack=1 确认信息
11、Fin_WAIT_1 为主动断链接的一方
12、在断链接时如果并发少,基本看不多TIME—WAIT。但如若高并发,系统会出现TIME—WAIT状态,需要监查内存
13、TCP,需要建链接,又称可靠传输,相对安全但效率低,一般用于转账
14、UDP,不需要建链接,又称不可靠传输,效率高,但安全性较低,一般用于聊天(QQ)和查询
15、套接字有被称作IP和端口
16、AF_INET (AF:address family 套接字类型,INET:基于网络)
17、TCP 被称为流式协议,SOCK_STREAM
18、UDP 被称为数据报协议,SOCK_DGRAM
19、127.0.0.1 指本机,主要用于调试
20、端口0-65535,0-1024被系统使用,其他号码可选用
21、phone.listen(5): 5指的是同时最多可以用多少个请求,而不是连接数
22、conn.recv(1024):1024为最大限制的字节数
23、conn为套接字对象,为三次握手的产物,可收可发
24、conn.close():回收系统资源

二、基于tcp协议的套接字通信
服务端:
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.bind(('127.0.0.1',8081)) #插手机卡,补充:0-65535 0-1024给系统用的
phone.listen(5) # 开机
print('start...')
conn,client_addr=phone.accept() # 等电话连接
print('连接来了:',conn,client_addr)
# 收发消息
msg=conn.recv(1024) #收消息,1024是一个最大的限制
print('客户端的消息: ',msg.decode('utf-8'))
conn.send(msg+'SB'.encode('utf-8'))
# 挂电话
conn.close()
# 关机
phone.close()
客户端:
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.connect(('127.0.0.1', 8081)) # 拨电话,地址为服务端的ip和端口
phone.send('你好'.encode('utf-8')) # 发消息b'hello'
data = phone.recv(1024) #收消息
print(data.decode('utf-8'))
phone.close()
三、加上通信循环与连接循环
服务端:
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.bind(('127.0.0.1',8081))
phone.listen(5)
print('start...')
while True: # 连接循环
    conn,client_addr=phone.accept()
    print('客户端 ',client_addr)
    while True: # 通信循环
        try:
            msg=conn.recv(1024)
            print('客户端的消息: ',msg)
            conn.send(msg+b'SB')
        except ConnectionResetError:
            break
    conn.close()
phone.close()
客户端:
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口
while True:
    msg=input('>>>: ').strip()
    phone.send(msg.encode('utf-8')) # 发消息b'hello'
    data=phone.recv(1024) #收消息
    print(data.decode('utf-8'))
phone.close()

day31网络编程的更多相关文章

  1. day31 网络编程,多进程多线程

    今天的内容需要好好整理,概念性的东西比较多,都是需要理解的,这些是基层的理解,后期的很多知识都是要建立在今天的概念基础上的,以下两点是核心内容,必须要理解,自己把自己理解的注释加在里面: 进程就是程序 ...

  2. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  3. 猫哥网络编程系列:HTTP PEM 万能调试法

    注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...

  4. python select网络编程详细介绍

    刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...

  5. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  6. 猫哥网络编程系列:详解 BAT 面试题

    从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...

  7. 浅谈C#网络编程(一)

    阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...

  8. C++11网络编程

    Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...

  9. Java - 网络编程

    Java的网络编程学习,关于计算机基础的学习参考:计算机网络基础学习 - sqh.     参考:  

随机推荐

  1. 用python一起来看流星雨

    源代码如下(遇上篇烟花代码几乎一样,参数值稍微不一样): # -*- coding: utf-8 -*- # Nola import tkinter as tk from PIL import Ima ...

  2. ﺑﯘﻟﺒﯘﻟﻼﺭ--思恋--IPA--维吾尔语

    很美的维语歌曲, 迪里拜尔将之唱得十分动人心弦.

  3. NotePad++配置使之支持jquery、html、css、javascript、php提示

    1.将以下文件复制到Notepad++\plugins\apis覆盖之前的xml文件 javascript.xml html.xml css.xml   2.打开notepad++设置>首选项& ...

  4. 重开Vue2.0

    目录: 内容: 一.Vue内部指令: 1.v-if v-else&v-show v-if与v-show都是选择性显示内容的指令,但是二者之间有区别: 1.v-if:判断是否加载,在需要的时候加 ...

  5. 重启HA集群NameNode无缘无故挂掉

    重启HA集群后,两个NameNode无缘无故挂掉,查看日志时显示错误如下: 原因:journalnode的端口是8485,默认情况下是先NameNode启动后再启动journalnode,如果在Nam ...

  6. day05 集合

    今日进度(数据类型) 集合 内存相关 深浅拷贝 1.集合表示 1.无序 2.不重复 3.hash查找 #问题:v={}表示? set: v1=set()#空集合 v1={1,2,3,4,5} dict ...

  7. day05 None类型

    None:空类型 表示该值是一个空对象,既不是0也不是" ",判断时候都为False

  8. LiquiBase 学习

    preconditions mysql database is installed maven has been setted up properly add depedenceies apply p ...

  9. ssh 22端口号拒绝

    1:当scp或者ssh登录ubuntu远程服务的时候,出现:

  10. Java方法的静态绑定与动态绑定讲解(向上转型的运行机制详解)

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6554103.html 一:绑定 把一个方法与其所在的类/对象 关联起来叫做方法的绑定.绑定分为静态绑定(前期绑 ...