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是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...
随机推荐
- 怎么将XML字符串转换为XmlDocument,并获取部分节点值
我们的目标:解析XML字符串,并获取节点:z:row下的属性:ows_LinkFilename的值集合??? XML字符串数据结构如下: <listitems xmlns:s='uuid:BDC ...
- EF Codefirst 中间表(关系表)的增删改查(转)
EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD) 前言 此文章只是为了给新手程序员,和经验不多的程序员,在学习ef和lambada表达式的过程中可能遇到的问题. 本次使用订 ...
- 25.QT-模型视图
模型视图设计模式的核心思想 使模型(数据)与视图(显示)相分离 模型只需要对外提供标准接口存取数据,无需数据如何显示 视图只需要自定义数据的显示方式,无需数据如何组织存储 当数据发生改变时,会通过信号 ...
- 【Java每日一题】20170227
20170224问题解析请点击今日问题下方的“[Java每日一题]20170227”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; import jav ...
- 汇编语言--微机CPU的指令系统(五)(转移指令)
(9)转移指令 转移指令是汇编语言程序员经常使用的一组指令.在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所 ...
- Java自动内存管理机制学习(一):Java内存区域与内存溢出异常
备注:本文引用自<深入理解Java虚拟机第二版> 2.1 运行时数据区域 Java虚拟机在执行Java程序的过程中把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创 ...
- 微信小程序调用地图选取位置后返回信息
先看一下wxml的代码,绑定个事件! <view class='carpool_data_all'> <view class='aa'> <text>*出发地< ...
- Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现
大体思路 前面我们实现了点击开始游戏按钮,系统依次给玩家发牌的逻辑和动画,并展示当前的手牌.这期我们继续实现接下来的功能--叫地主. 1.首先这两天,学习了DOTween,这是一个强大的Unity动画 ...
- Spring IOC/DI
IOC:反转控制(资源获取),之前开发是要什么就 new 什么,现在只需创建 IOC 容器,你要什么 IOC 都会给你,你只管接收.反转控制的对象是 Bean,也就是对象 DI:依赖注入,依赖容器把资 ...
- mysql学习之完整的select语句
本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order by limit 首发日期:2018-04-11 完整语法: 先给一下完整的语法,后面将逐一来 ...