内容回顾

网络编程

  • 概念
  • B/S C/S架构
    • B/S browser server
    • C/S client 装客户端使用的 server远程服务器的
  • osi七层协议

今日内容

  • tcp协议的编程

    • 如何在连接内多和客户端说几句

    • 能够接收多个客户端的请求

    • import socket
      
      sk=socket.socket()
      sk.bind(('127.0.0.1',9000))
      sk.listen() #就可以等人来连接了 while True:
      conn,addr=sk.accept() #能和多个客户端握手了
      print('conn:',conn)
      while True:
      send_msg=input('>>>')
      conn.send(send_msg.encode('utf-8'))
      if send_msg.upper()=='Q':
      break
      msg=conn.recv(1024).decode('utf-8')
      if msg.upper() == 'Q':
      break
      print(msg)
      conn.close() #挥手 断开连接 sk.close()
      import socket
      
      sk=socket.socket()
      sk.connect(('127.0.0.1',9000)) while True:
      msg=sk.recv(1024)
      msg2=msg.decode('utf-8')
      if msg2.upper()=='Q':
      break
      print(msg,msg2)
      send_msg=input('>>>')
      sk.send(send_msg.encode('utf-8'))
      if send_msg.upper()=='Q':
      break sk.close()
  • udp协议的编程

    import socket
    
    sk=socket.socket(type=socket.SOCK_DGRAM) #创建套接字
    sk.bind(('127.0.0.1',9000)) #绑定端口
    while True:
    msg,addr=sk.recvfrom(1024) #被动等待
    print(msg.decode('utf-8'))
    msg=input('>>>')
    sk.sendto(msg.encode('utf-8'),addr)
    import socket
    
    sk=socket.socket(type=socket.SOCK_DGRAM) #创建套接字
    server=(('127.0.0.1',9000)) while True:
    msg = input('>>>')
    if msg.upper()=='Q':
    break
    sk.sendto(msg.encode('utf-8'),server)
    msg=sk.recv(1024).decode('utf-8')
    if msg.upper()=='Q':
    break
    print(msg)
  • 粘包现象

    • 两条连续发送的数据黏在一起了
    • 只出现在tcp协议中
      • 因为tcp协议 多条消息之间没有边界,并且还有一大堆优化算法
      • 发送端:两条消息都很短,发送的间隔时间也非常短
      • 接收端:多条消息由于没有及时接收,而在接收方的缓存短 堆在一起导致的粘包现象
    • 网络最大带宽限制 MTU=1500字节
    • tcp发多大都行 因为会在中途拆分
  • struct模块

  • 选课系统讲解I

代码总行数2856+174=3030行

python29day的更多相关文章

随机推荐

  1. 【LeetCode】96. Unique Binary Search Trees 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 记忆化递归 动态规划 卡特兰数 日期 题目地址:ht ...

  2. codeforce-424C. Magic Formulas(数学)

    C. Magic Formulas time limit per test:2 seconds     memory limit per test:256 megabytes   input stan ...

  3. 【Java例题】3.3 正整数分解

    3.将一个正整数分解为连续多个正整数之和. 例如: 15=1+2+3+4+5 15=4+5+6 15=7+8 package chapter3; import java.util.*; public ...

  4. Ubuntu安装Git及Git配置

    1.检查Git是否已经安装 使用git version,若不显示版本号则Git未安装,下面是我安装好后显示的版本号 2.安装Git sudo apt-get install git Centos使用y ...

  5. Asp.Net Core 使用Monaco Editor 实现代码编辑器

    在项目中经常有代码在线编辑的需求,比如修改基于Xml的配置文件,编辑Json格式的测试数据等.我们可以使用微软开源的在线代码编辑器Monaco Editor实现这些功能.Monaco Editor是著 ...

  6. 【白话科普】10s 从零看懂 H5

    最近大家有没有发现,很多微信公众号的动态内容变多了?我们常常可以看到,公众号内容中有很多动态图片甚至动画,还可以通过手指滑动切换页面,或者有一些小的点击互动. 这种看起来有点高级的小作品,其实是都是& ...

  7. wordpress搭建网站更改域名后打开网页排版显示错乱解决办法

    发生的原因: 我本来已经搭建好了网站,也测试了没问题.后来更改了网站的域名,出现了这种情况. 解决办法: 需要修改数据库的options表里面的 siteurl 和 home 这两个表的内容为最新的域 ...

  8. PowerShell 管道符之Where-Object的使用方法

    1 Get-Process|Select-Object -Property Name|Where-Object{$_ -match 'QQ'} 可以匹配到QQ为名的结果

  9. 查询 MySQL 字段注释的 5 种方法!

    很多场景下,我们需要查看 MySQL 中表注释,或者是某张表下所有字段的注释,所以本文就来盘点和对比一下查询注释的几种方式. 创建测试数据库 开始之前咱们先创建一个数据库,以备下面演示使用. -- 如 ...

  10. Java不限制从键盘输入一个数组

    Java不限制从键盘输入一个数组 在写算法的时候,需要从键盘输入一个数组,一直不会,最近看了几篇博客学会了,下面用二分查找举例: package com.基础; import java.util.Sc ...