python 初始socket
一、网络基础
1、c\s架构:客户端英文名称:Client(使用服务端的服务),服务端英文名称:Server
软件c\s架构:QQ、微信、优酷、暴风影音、浏览器(IE、火狐,360浏览器等);
软件b\s架构:其中浏览器又比较特殊,很多网站是基于浏览器来进行访问的,浏览器和各个网站服务端进行的通讯方式又常被成为B\S架构(浏览器英文名称:Browser)。核心技术采用了统一接口。
硬件c/s架构:打印机
不管哪个架构,他们都要进行网络通信,基本都要用socket,我们学习socekt就是为了完成C\S架构项目的开发。
2、网络整个流程
(1)、网线:传输电信号
(2)、网卡:接受电信号
(3)、集线器:将所有连接到集线器的设备连通起来
(4)、交换机:升级版的集线器
(5)、MAC地址(物理地址):网卡出场时候就已经确定的,独一无二的
如、8C-EC-4B-88-B9-C9(前三位厂商编号,后三位生产流水号)
(6)、单播:一对一发送
(7)、广播:一对多发送
(8)、广播风暴:网络拥堵、信息不安全
(9)、ip地址:ipv4地址:192.168.15.46 #4个点分二进制
作用:划分广播域
(10)、子网掩码:计算两个ip地址是否属于同一个子网(交换机从事这项工作)
计算方法:子网掩码的二进制与目标地址和源地址的二进制分别位与运算,若结果相同,则属于同一子网,否则不属于同一子网。
源ip地址:192.168.15.46
11000000.10101000.00001111.00101110
11111111 .11111111 .11111111 .00000000
11000000.10101000.00001111.00000000 #192.168.15.0
目标的ip:192.168.16.30 #192.168.16.0
结果:不是同一子网
(11)、路由器:转发消息
(12)、路由协议:计算路由发送信息的最优路径。
(13)、网关:内网和外网的关卡
(14)、ARP协议(地址解析协议):根据IP地址获取物理地址的一个TCP/IP协议。
(15)、DNS协议:DNS就是进行域名解析的服务器,记录了域名和公网ip的对应关系
(16)、DHCP协议(动态主机设置协议):自动分配动态ip给终端。
(17)、端口号: 0-65535,0-1024基本是内部程序使用。建议分配的临时端口号8000+;用于定位到某服务器的某程序
ip地址+端口=确定某电脑上的某个程序
(18)、NAT:网络地址转换,将局域网ip地址转换为公网的ip地址。
二、初始 socket
1、实现简单的服务器和客户端的通信
服务器程序:服务器.py
import socket
#实例化socket对象
server=socket.socket() #类似创建一部手机 ip_port=("192.168.15.35",8001)#买一个电话卡
#绑定一个ip和端口
server.bind(ip_port) #插卡 #监听
server.listen()#开机 #等待客户端连接
conn,addr=server.accept() #等待别人的电话, 阻塞现象 ;解包过程
print(conn) #连接通道
print(addr) #对方的ip和端口号 # 服务器使用管道发送消息 conn.send()
conn.send(b'zaima')
# 等待接受对方的消息
from_client_msg=conn.recv(1024)
print("来自客户端的消息:",from_client_msg)
conn.send(b'gun')
#关闭连接管道
conn.close() #挂电话
#关机,关闭socket
server.close()#拔电话线
客服端程序:客服端.py
import socket
client=socket.socket()#实例化对象
#服务器的ip和端口
server_ip_port=("192.168.15.35",8001)
# 链接服务器的应用程序
client.connect(server_ip_port) from_server_msg1=client.recv(1024)#阻塞
print("服务器发来的第一条信息",from_server_msg1) #客服端用client.send给服务器发送消息,消息必须是bytes形式
client.send(b'yuema') # 再次等待服务器发送信息
from_server_msg=client.recv(1024) #阻塞 print("来自服务端的消息:",from_server_msg)
client.close()
执行流程:先启动服务器程序-->再启动客服端程序
#服务器的结果显示:
<socket.socket fd=408, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('192.168.15.35', 8001), raddr=('192.168.15.35', 54866)>
('192.168.15.35', 54866)
来自客户端的消息: b'yuema'
客户端结果显示:
服务器发来的第一条信息 b'zaima'
来自服务端的消息: b'gun'
2、程序升级,会话聊天现实,输入拜拜,推出程序
升级版本的服务端程序
import socket
server=socket.socket() ip_port=("192.168.15.35",8001)
server.bind(ip_port) server.listen()
conn,addr=server.accept()
while 1:#模拟回话机功能
server_msg=input("张三>>>")
conn.send(server_msg.encode("utf-8"))
if server_msg == "拜拜":#如果输入"拜拜",发送信息给对方后,跳出while
break
else:
from_client_msg=conn.recv(1024).decode("utf-8")
print("李四>>>", from_client_msg)
if from_client_msg == "拜拜":#如果接收"拜拜",发送信息给对方后,跳出while
break conn.close()
server.close()
升级版后的客户端程序
import socket
client=socket.socket() server_ip_port=("192.168.15.35",8001)
client.connect(server_ip_port)
while 1:
from_server_msg1=client.recv(1024).decode("utf-8")
print("张三>>>",from_server_msg1)
if from_server_msg1=="拜拜":#如果接收"拜拜",发送信息给对方后,跳出while
break
else:
client_msg=input("李四>>>")
client.send(client_msg.encode("utf-8"))
if client_msg == "拜拜":#如果输入"拜拜",发送信息给对方后,跳出while
break client.close()
执行流程:先启动服务器程序-->再启动客服端程序
tcp端口复用问题解决方案
server=socket(AF_INET,SOCK_STREAM)
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
python 初始socket的更多相关文章
- 进击的Python【第十章】:Python的socket高级应用(多进程,协程与异步)
Python的socket高级应用(多进程,协程与异步)
- Python底层socket库
Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...
- 转:Python 的 Socket 编程教程
这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs. ...
- Pyhont 网络编程【第一篇】初始Socket网络套接字
一.什么是socket: Socket 别名 “网络套接字”,指网络通信链句柄 其实就是一堆网络信息(ip+端口) 建立起的链接称之为socket,Socket的英文原义是“孔”或“插座”,用来实现不 ...
- Python Udp Socket
socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型S ...
- Python Tcp Socket
socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型S ...
- Python 之socket的应用
本节主要讲解socket编程的有关知识点,顺便也会讲解一些其它的关联性知识: 一.概述(socket.socketserver): python对于socket编程,提供了两个模块,分别是socket ...
- python tcp socket 多线程
不多说,直接上代码 client.py #!/usr/bin/python import socket,sys,string host="localhost" port=8000 ...
- 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具
老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...
随机推荐
- fiddler抓取https请求(android/ios)
本文转载自:http://blog.csdn.net/songer_xing/article/details/53841401 备注:本人有这样的一个需求,先记录下,以后再进行整理. 在抓包过程中发现 ...
- ife 零基础学院 day 2
第二天:给自己做一个在线简历吧 最后的验证,提出了几个问题,尝试解答一下 HTML是什么,HTML5是什么 HTML的定义摘抄自w3school的HTML 简介 HTML 是用来描述网页的一种语言. ...
- 【Java每日一题】20170329
20170328问题解析请点击今日问题下方的“[Java每日一题]20170329”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...
- Java学习笔记之——包
可以利用包,把不同的类分类存放,方便管理 在同一个包下不允许出现同名的类,可以利用分包达到可以出现同名的类 (1)包的创建: 命名:尽量做到不重复 一般:域名倒置作为前缀,再加上功能等分包 eg: ...
- Hibernate入门(七)一对多入门案例
一对多 场景模拟:用户(一)对订单(多) 1.建表 创建客户表,字段有:客户id,客户姓名,客户性别,客户年龄,客户年纪,客户电话. 创建订单表,字段有:订单编号,明细编号,客户编号(外键) DROP ...
- crontab工具安装和检查
什么是crontab?crontab 是一个用于设置周期性执行任务的工具 重启crond守护进程 systemctl restart crond 查看当前crond状态 systemctl statu ...
- JavaScript中判断整字类型最简洁的实现方法
这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...
- 鼠标滑过侧边弹出内容(JS)
效果展示 实现原理 1. html结构: <div id="contain"> <span id="share">分享</span ...
- CSS3动画属性:动画(animation)
一:动画(animation)的参数详解 由于上面用到了animation动画,这里详细介绍下这个animation的参数. 简介 CSS动画(Animations)简单说就是在一段固定的动画时间内暗 ...
- GIS开发之数据查询
在GIS开发之我们经常会用到属性查询和空间查询,特别是在数据量比较大的时候,如何提高查询效率成为一个问题 1.属性查询 对于属性查询,除了必要的建索引之外,我们还应该考虑使用字段缓存:减少查询字段,减 ...