一内容回顾

  网络基础

  网络应用开发架构

    B/S架构   浏览器直接作为客户端的程序

    C/S架构

    B/S是特殊的C/S

  osi七层模型

    应用层  python代码   http  https  ftp  smtp

    socket

    传输层   port tcp/udp协议    四层交换机  四层路由器

    网络层  ip协议                     三层路由器  三层交换机

    数据链路层   mac地址  arp协议         网卡   二层交换机

    物理层

  tcp网络模型中

    arp协议-网络层

二.今日内容

  tcp协议

   代码

   协议特点

     三次握手

     为什么使用tcp协议

     四次挥手

   代码进阶  完善

  udp协议

    代码

    协议特点

    代码的进阶

tcp

import socket

sk = socket.socket()
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 只在测试的时候添加,到正式的生产环境中应该去掉
sk.bind(('127.0.0.1',9000))
sk.listen()
while True:
conn,addr = sk.accept() # 接电话
while True:
msg =conn.recv(1024)
print(msg.decode('utf-8'))
message = input('>>>')
conn.send(message.encode('utf-8'))
if message == 'q':
break
conn.close() sk.close()
# 起web服务 永远先启动服务端 
# server端 - 服务端
# 端口被占用的原因
# bind 已经向操作系统申请了一个9000的端口
# 如果9000没有被占用,那么就批准给你使用
# 直到sk.close的时候,这个端口才归还给操作系统
# 程序结束但是忘记close关闭,
# 那么操作系统就不能及时发现这个端口已经被归还
# 当你重启程序再次申请使用9000端口的时候
# 操作系统告诉你这个端口被占用了 # 网络上是否连通决定了两台电脑能否通信
# 和tcp建立了连接之后才能通信完全是两回事儿
# 可靠的协议 # 为什么要有tcp协议
# 可靠
# 全双工
# 效率低
# 建立连接 : 三次握手
# 断开连接 : 四次挥手 # 社交软件
# tcp就不适用了 udp协议
# 1.连接资源有限
# 同一时刻只能和一个客户端沟通
# 2.每一次数据的发送都需要一个回执来确保数据可靠
# 数据发送的效率不高

client

import socket

sk = socket.socket()

sk.connect(('127.0.0.1',9000))
while True:
message = input('>>>')
sk.send(message.encode('utf-8'))
ret = sk.recv(1024)
if ret == b'q':
break
print(ret.decode('utf-8'))
sk.close()

udp

server

import socket
sk = socket.socket(type = socket.SOCK_DGRAM)
addr = ('127.0.0.1',9000)
sk.bind(addr) while True:
# udp来说 第一个信息 必须是先接收
msg,cli_addr = sk.recvfrom(1024)
print(msg.decode('utf-8'))
# message = input('>>>')
sk.sendto('收到'.encode('utf-8'),cli_addr) sk.close() # 1 先把udp协议的cs调通
# 2 让cs之间通信多说点儿话
# 3 让多个client和server进行通信 # 在server端根本就不应该有input

client

import socket
sk = socket.socket(type = socket.SOCK_DGRAM) # b'hello' == 'hello'.encode('utd-8')
sk.sendto(b'hello',('127.0.0.1',9000))
msg,ser_addr = sk.recvfrom(1024)
print(msg)
print(ser_addr) sk.close()


最新文章

  1. iptables防火墙原理详解
  2. [转]android访问网络:java.net.ConnectException: localhost/127.0.0.1:8888 - Connection refused
  3. JAVA 根据数据库表内容生产树结构JSON数据
  4. linux常用命令--ps、netstat、find
  5. SQL Server数据库学习笔记-设计表时应该考虑的因素
  6. 282. Expression Add Operators
  7. C#_delegate - Pair<T> 静态绑定
  8. 24种设计模式--桥梁模式【Bridge Pattern】
  9. insert时出现主键冲突的处理方法【转载】
  10. tableView滚动的时候会 最后一行显示不完全的问题
  11. Android 获取 AudioRecord 麦克风音量大小并做选择性发送
  12. python 命令行参数——argparse模块的使用
  13. CSS 知识点整理
  14. Python 属性描述符和属性的查找过程
  15. GIT-常规操作
  16. 多线程Thread类的方法
  17. 【译】写好JavaScript条件语句的5个技巧
  18. JDBC删除数据实例
  19. 发布.NET Core到IIS
  20. Js 中的原始值和引用值

热门文章

  1. 借助rownum中求Oracle表中前三名(三甲:状元榜眼探花)的方法(总计三种方法,以讲述rownum的使用为主)
  2. apache常见错误:VC运行库(找不到 VCRUNTIME140.dll)
  3. python修改excel内容
  4. kvm虚拟化存储管理(3)
  5. 格式化时间戳的n种方法
  6. 在自己win系统里面给idea配置Git
  7. 喜大普奔!GitHub中文版帮助文档上线了!
  8. Flutter音频播放--chewie_player的基本使用
  9. gRPC-Protocol语法指南
  10. 2020 Java开发者数据分析:中国已成为 Java 第一大国