一、网络基础

  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的更多相关文章

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

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

  2. Python底层socket库

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

  3. 转:Python 的 Socket 编程教程

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

  4. Pyhont 网络编程【第一篇】初始Socket网络套接字

    一.什么是socket: Socket 别名 “网络套接字”,指网络通信链句柄 其实就是一堆网络信息(ip+端口) 建立起的链接称之为socket,Socket的英文原义是“孔”或“插座”,用来实现不 ...

  5. Python Udp Socket

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

  6. Python Tcp Socket

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

  7. Python 之socket的应用

    本节主要讲解socket编程的有关知识点,顺便也会讲解一些其它的关联性知识: 一.概述(socket.socketserver): python对于socket编程,提供了两个模块,分别是socket ...

  8. python tcp socket 多线程

    不多说,直接上代码 client.py #!/usr/bin/python import socket,sys,string host="localhost" port=8000 ...

  9. 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具

    老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...

随机推荐

  1. fiddler抓取https请求(android/ios)

    本文转载自:http://blog.csdn.net/songer_xing/article/details/53841401 备注:本人有这样的一个需求,先记录下,以后再进行整理. 在抓包过程中发现 ...

  2. ife 零基础学院 day 2

    第二天:给自己做一个在线简历吧 最后的验证,提出了几个问题,尝试解答一下 HTML是什么,HTML5是什么 HTML的定义摘抄自w3school的HTML 简介 HTML 是用来描述网页的一种语言. ...

  3. 【Java每日一题】20170329

    20170328问题解析请点击今日问题下方的“[Java每日一题]20170329”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...

  4. Java学习笔记之——包

    可以利用包,把不同的类分类存放,方便管理 在同一个包下不允许出现同名的类,可以利用分包达到可以出现同名的类 (1)包的创建: 命名:尽量做到不重复 一般:域名倒置作为前缀,再加上功能等分包 eg:   ...

  5. Hibernate入门(七)一对多入门案例

    一对多 场景模拟:用户(一)对订单(多) 1.建表 创建客户表,字段有:客户id,客户姓名,客户性别,客户年龄,客户年纪,客户电话. 创建订单表,字段有:订单编号,明细编号,客户编号(外键) DROP ...

  6. crontab工具安装和检查

    什么是crontab?crontab 是一个用于设置周期性执行任务的工具 重启crond守护进程 systemctl restart crond 查看当前crond状态 systemctl statu ...

  7. JavaScript中判断整字类型最简洁的实现方法

    这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...

  8. 鼠标滑过侧边弹出内容(JS)

    效果展示 实现原理 1. html结构: <div id="contain"> <span id="share">分享</span ...

  9. CSS3动画属性:动画(animation)

    一:动画(animation)的参数详解 由于上面用到了animation动画,这里详细介绍下这个animation的参数. 简介 CSS动画(Animations)简单说就是在一段固定的动画时间内暗 ...

  10. GIS开发之数据查询

    在GIS开发之我们经常会用到属性查询和空间查询,特别是在数据量比较大的时候,如何提高查询效率成为一个问题 1.属性查询 对于属性查询,除了必要的建索引之外,我们还应该考虑使用字段缓存:减少查询字段,减 ...