一. C\S架构, 客户端服务端架构
客户端(client): 享受服务端提供的服务
服务端(server): 给客户端提供服务
B\S 浏览器和服务端 B (browser) 二. 网络通信的整个流程(硬件\名词)
集线器: 将所有的插上集线器的电脑连通起来
交换机: 升级版集线器
网卡: 接收电信号 网络插口:插网线
mac地址(物理地址): ‎D8-C4-97-6C-0A-E5 16进制的6个数表示,前三位厂商编号,后三位生产流水号
就是网卡的mac地址,全球唯一,相当于身份证
广播\单播
广播风暴: 不安全,拥堵信息
IP地址: 192.168.15.87 四个点分十进制组成
192.168.15.0 -- 192.168.15.255 共256个IP地址, 交换机给自动分配
101010101010 2**8 = 256 作用: 划分广播域
IPv4: 4个点分十进制
IPv6: 6个冒号分十六进制 # fe80::e018:1a0e:cb9d:8d79%13 DHCP协议: 自动分配IP地址
子网掩码: 255.255.255.0 # 计算IP是否是同一网段的,属于同一个网段的,我们称为属于同一个子网
另外一个班的同学的IP地址为192.168.14.12
11000000.10101000.00001110.00001100 # 此同学IP地址的8位2进制
子网掩码255.255.255.0
11111111.11111111.11111111.00000000 # 子网掩码的二进制
先转化成2进制,然后对应值做and运算
11000000.10101000.00001110.00000000
返回192.168.14.0 交换机计算出不是15网段的,就上报广播给各个交换机.
路由器管辖所有交换机,交换机管辖子网
路由器: 管理网络, 联通外网,并且由路由器转发,就是转发消息
DNS服务器: 域名: www.jd.com => ip地址
路由协议: 计算转发消息的最优路径
网关: 公网IP,把关,也是路由器的IP地址
NAT: 网络地址转换,把内网,也是局域网的IP地址,转化为公网的IP地址,也就是网关的IP地址
局域网\内网
端口: 电脑创建的标识程序用的
0-65535 # 范围
0-1024 属于电脑内部的一些服务用的,千万别用. 一般自己写都用8000以后的 三. 初识socket 套接字(网络通信考点)
  阻塞: 程序卡住了,不继续往下运行


# 创建服务端

import socket

# 创建了一个socket对象
server = socket.socket() # 一个元组
ip_port = ('192.168.15.87', 8001) # 8001 自己设置的服务端的端口号 # 绑定IP地址和端口
server.bind(ip_port) # 监听IP地址和端口
server.listen(3) # 后面等待连接的个数 3 个
print('等待连接中...')
# 等待客户端连接
conn, addr = server.accept() # 等着连接,阻塞住 print('连接成功!')
print(conn) # 连接通道
print('>>>', addr) # 客户端的IP地址和端口 # 接收消息. 接收的消息是bytes类型,需要转化成字符串
msg_from_client = conn.recv(1024).decode('utf-8') # 1024b 为能接收到的消息大小,如果消息是2048b,那么只能接收到1024b; 只能 传输字节,接收消息需要解码,发送消息需要编码
print(msg_from_client)
conn.send('没吃呢,你请客吗?'.encode('utf-8')) # 关闭连接
conn.close()
server.close()
# 创建客户端

import socket

client = socket.socket()

server_ip_port = ('192.168.15.87', 8001)

# 连接服务端
client.connect(server_ip_port) client.send('你吃了吗?'.encode('utf-8')) # send里面的消息必须是字节类型的 msg_from_server = client.recv(2048).decode('utf-8')
print(msg_from_server) client.close()
import socket

server = socket.socket()
ip_port = ('192.168.15.87', 8000)
server.bind(ip_port)
server.listen(3)
print('等待连接中...')
conn, addr = server.accept()
print('连接成功!')
while 1:
msg_from_client = conn.recv(2048).decode('utf-8')
print(msg_from_client)
content = input('请输入,按Q退出,按Enter继续:')
if content.upper() == 'Q':
break
elif content == '':
continue
conn.send(content.encode('utf-8')) conn.close()
server.close()

服务端问答模式

import socket

client = socket.socket()
# server_ip_port = ('192.168.15.91', 8002)
server_ip_port = ('192.168.15.107', 8001)
client.connect(server_ip_port)
while 1:
msg = input('请输入,按Q退出,按Enter继续:')
if msg.upper() == 'Q':
break
elif msg == '':
continue
client.send(msg.encode('utf-8'))
msg_form_server = client.recv(2048).decode('utf-8')
print(msg_form_server) client.close()

客户端问答模式

当listen里面写了等候数量,已经有客户端处于等待状态的时候,如果强行关闭连接中的客户端,则会报错.如果将客户端优雅地关闭,则等待中的客户端可以依次连接.

import socket

server = socket.socket()
ip_port = ('192.168.15.87', 8001)
server.bind(ip_port)
server.listen(3)
flag = 1
while flag:
print('等待连接中...')
conn, addr = server.accept()
print('连接成功!')
while 1:
print('等待接收消息...')
msg_from_client = conn.recv(1024).decode('utf-8')
print(msg_from_client)
if msg_from_client == 'bye':
break
msg = input('服务端:')
conn.send(msg.encode('utf-8'))
if msg == 'bye':
flag = 0
break conn.close() server.close()
服务端准备服务多个客户端

服务端准备服务多个客户端

# 优雅地关闭客户端

import socket

client = socket.socket()
server_ip_port = ('192.168.15.87', 8001)
client.connect(server_ip_port) while 1:
msg = input('客户端:')
client.send(msg.encode('utf-8'))
if msg == 'bye':
break
print('等待接收消息...')
msg_from_server = client.recv(1024).decode('utf-8')
print(msg_from_server)
if msg_from_server == 'bye':
break client.close()

优雅地关闭客户端

Day27--Python--初识socket的更多相关文章

  1. python——初识socket

    什么是socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链 ...

  2. day9学python 类+异常处理+初识socket

    类+异常处理+初识socket 类的特点: 1.封装-同其他语言 2.继承 py2 经典类深度优先 新式类类名(object)广度优先py3 都是广度优先 3.多态-python本身无多态 可用方法调 ...

  3. python 网络内容: 初识socket

    一 C\S架构,客户端服务端架构 客户端(client) : 享受服务端提供的服务 服务端(server) : 给客户端提供服务 B\S 浏览器和服务端 B(browser) 二 网络通信的整个流程( ...

  4. python学习之路---day25( 网络编程基础和初识socket)

    基本网络知识和初识socket一:基本知识 网线:传输电信号 集线器:将所有连接到集线器的网络设备连通起来 交换机: 升级版的集线器 网卡:接受电信号 MAC地址:物理地址: 8C-88-4B-88- ...

  5. python之socket

    一.初识socket      socket 是网络连接端点,每个socket都被绑定到一个特定的IP地址和端口.IP地址是一个由4个数组成的序列,这4个数均是范围 0~255中的值(例如,     ...

  6. Python 入门【一】Python 初识及学习资料

    Python 初识及学习路线: CodeCademy Python 在线教学: 廖雪峰 Python 2.7 教程: 廖雪峰 Python 3.0 教程: Python 官方文档(2.7~3.7:英文 ...

  7. 进击的Python【第十章】:Python的socket高级应用(多进程,协程与异步)

    Python的socket高级应用(多进程,协程与异步)

  8. Python底层socket库

    Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...

  9. 转:Python 的 Socket 编程教程

    这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs. ...

  10. Python Udp Socket

    socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型S ...

随机推荐

  1. 利用 ajax自定义Form表单的提交方式

    需求场景:有时候单纯的form表单无法向后端传递额外的参数 比如需要action传递js异步生成的参数 ,form表单默认的action就无法满足需求,这时就需要我们自定义form表单的提交方式. h ...

  2. HTML5获取地理位置信息

    <!DOCTYPE html> <html> <head> <title>Location</title> <meta charset ...

  3. FTP登录不上 显示“找不到元素”

    FTP登录不上 显示“找不到元素” 问题描述: 资源管理器登陆不上ftp服务器,ie现在打不开网页(包括普通的网页和ftp)360等其他浏览器可以正常打开网页. 解决方法: 应该是用了代理软件的问题, ...

  4. Github提交本地代码

     第一步:建立git仓库 cd到你的本地项目根目录下,执行git命令 git init 第二步:将项目的所有文件添加到仓库中 git add . 如果想添加某个特定的文件,只需把.换成特定的文件名即可 ...

  5. LNMP平台部署

    LNAP平台概述 百度百科 LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构. Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统.代表版本有 ...

  6. BZOJ1150[CTSC2007]数据备份Backup——模拟费用流+堆+链表

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游 ...

  7. Codeforces Round #488 Div. 1

    A:枚举每个点判断是否同时在两个正方形中即可. #include<iostream> #include<cstdio> #include<cmath> #inclu ...

  8. Git——入门操作加创建账号【三】

    创建账号 GitHub https://github.com/ 码云 https://gitee.com/ 无论是github还是码云,创建账号都是非常简单快捷的,大家可以自行选择创建下,不过建议最好 ...

  9. ContOS安装配置MySQL,redis

    MySQL(MariaDB) 一,说明 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MyS ...

  10. Catch the Theves HDU - 3870(s - t平面图最小割)

    题意: 板题...建个图..跑一遍spfa就好了...嘻嘻... 注意..数组大小就好啦..400 * 400 = 1600 我也是抑郁了..沙雕的我.. #include <iostream& ...