一内容回顾

  网络基础

  网络应用开发架构

    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()


day35 Pyhton 网络编程02的更多相关文章

  1. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  2. day34 Pyhton 网络编程

    一今日内容 # 函数 # 面向对象 # 进阶 # 网络编程 4 # 并发编程 6-7 # 概念 # 网络基础 # 局域网的概念 # 交换机和路由器的工作流程 # ip地址 # mac地址 # 子网掩码 ...

  3. day36 Pyhton 网络编程03

    一.内容回顾 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  4. day37 Pyhton 网络编程04

    # tcp协议和udp协议的选择问题 # tcp # 大量的连续的数据 传递文件\发送邮件 # 文件的传递 # 下载电影 # udp # 短消息类 社交软件 # qq 微信 # 在线播放视频 快会丢帧 ...

  5. day39 Pyhton 并发编程02 后

    一.开启子进程的另一种方式 import os from multiprocessing import Process class MyProcess(Process): def __init__(s ...

  6. day39 Pyhton 并发编程02

    一.内容回顾 并发和并行的区别 并发 宏观上是在同时运行的 微观上是一个一个顺序执行 同一时刻只有一个cpu在工作 并行 微观上就是同时执行的 同一时刻不止有一个cpu在工作 什么是进程 一个运行中的 ...

  7. Linux网络编程学习路线

    转载自:https://blog.csdn.net/lianghe_work/article 一.网络应用层编程   1.Linux网络编程01——网络协议入门 2.Linux网络编程02——无连接和 ...

  8. day40-网络编程02

    Java网络编程02 4.TCP网络通信编程 基本介绍 基于客户端--服务端的网络通信 底层使用的是TCP/IP协议 应用场景举例:客户端发送数据,服务端接收并显示控制台 基于Scoket的TCP编程 ...

  9. 02网络编程( socket套接字+TCP粘包 )

    目录 02 网络编程 一.socket套接字编程 二.简易代码模板 2.1 服务端 2.2 客户端 三.通信循环及代码优化 四.黏包现象 五.struct模块 六.简易版本报头 七.上传文件数据 * ...

随机推荐

  1. 与C中printf并列的System.out.printf 用法(转载)

    转载地址: https://blog.csdn.net/qq_39017218/article/details/80042287 printf的格式控制的完整格式: %  -  0  m.n  l或h ...

  2. mysql通过经纬度查询400公里范围内的小区

    mysql距离计算,单位m,以及排序 lng 经度 lat 纬度 一般地图上显示的坐标顺序为,纬度在前(范围-90~90),经度在后(范围-180~180) 传入参数 纬度 40.0497810000 ...

  3. upstream--负载

    语法格式: upstream 负载名 { [ip_hash;] server ip:port  [weight=数字]  [down]; server ip:port  [weight=数字]; } ...

  4. stackoverflow的ret2syscall利用

    ret2syscall 系统调用 ret2syscall,即控制程序执行系统调用,获取shell.Linux将内核功能接口制作为系统调用(system call),可在程序中直接调用.程序中存在int ...

  5. Java判断一个字符串是否是回文

    package com.spring.test; /** * 判断字符串是否为回文 * * @author liuwenlong * @create 2020-08-31 11:33:04 */ @S ...

  6. 并发编程中死锁、递归锁、进程/线程池、协程TCP服务器并发等知识点

    1.死锁 定义; 类似两个人分别被囚禁在两间房子里,A手上拿着的是B囚禁房间的钥匙,而B拿着A的钥匙,两个人都没法出去,没法给对方开锁,进而造成死锁现象.具体例子代码如下: # -*-coding:u ...

  7. junit源码之Runner

    Runner 定义了执行用例的执行器方法. public abstract class Runner implements Describable { /* 获取描述 */ public abstra ...

  8. centos7 yum安装redis及常用命令

    redis是什么 Redis是一种基于内存的数据结构存储,可持久化的日志型.Key-Value数据库.使用关系型数据库的站点达到一定并发量的时候,往往在磁盘IO上会有瓶颈,这时候配合redis就有一定 ...

  9. 趣图:大佬如何解决bug的

    Bug 变 Feature, 这招简直太帅了!   扩展阅读 趣图:我说自己菜 vs 大佬说自己菜 趣图:公司实习生找 Bug 趣图:国内一些大平台的推荐算法 趣图:开发和测试是如何对待代码的 趣图: ...

  10. Java源码赏析(一)Object 类

    写这个系列的原因,其实网上已经有无数源码分析的文章了,多一篇不多,少一篇不少,但为什么还要写这部分文章呢?于私,其一,上班族已经很久没有打过完整的一整段有意义的话,算是锻炼个人的书写.总结能力,其二, ...