一、网络基础

  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. 如何将各种低版本的discuz版本升级到discuz x3.0

    最近在做discuz改版的项目,遇到了很多问题,相信很多拥有discuz论坛的版主,站长和程序猿在升级或改版discuz的过程中遇到过和我一样的问题,所以我开了一个discuz专栏,为大家讲解一下di ...

  2. [转]Xcode编译生成ipa文件(因为两种证书所以打两个ipa)

    本文转自:https://blog.csdn.net/aisemi/article/details/78305795 1.生成Archive文档a) 需将左上角红色方框里的设备类型选为ios devi ...

  3. 扩展RBAC用户角色权限设计方案(转载)

    扩展RBAC用户角色权限设计方案  来源:https://www.cnblogs.com/zwq194/archive/2011/03/07/1974821.html https://blog.csd ...

  4. [angularjs] angularjs系列笔记(四)过滤器

    过滤器可以使用一个管道字符(|)添加到表达式和指令中,这不就是模板函数吗 <body> <div ng-app="Home"> <div ng-con ...

  5. 学习HttpClient,从两个小例子开始

    前言 HTTP(Hyper-Text Transfer Protocol,超文本传输协议)在如今的互联网也许是最重要的协议,我们每天做的很多事情都与之有关,比如,网上购物.刷博客.看新闻等.偶尔你的上 ...

  6. Elasticsearch系列(2):安装Elasticsearch(Linux环境)

    系统环境 操作系统:CentOS 6.9 Elasticsearch:6.2.2 Filebeat:6.2.2(收集IIS日志) Kibana:6.2.2 Java:Java 8 注意:elk最好选择 ...

  7. CSS border-collapse 属性

    表格边框合并: table {  border-collapse:collapse; 边框会合并为一个单一的边框 } ----------------------------------------- ...

  8. IE CSS Hack【记录】

    1.条件hack 2.属性hack 3.选择器hack CSS Hack一般都是利用各浏览器的支持CSS的能力和BUG来进行的 本文只列举了一些常用的CSS Hack,且不考虑IE6以下的版本 尽可能 ...

  9. java程序存入数据库中文乱码解决方案

    一.问题描述 背景:代码迁移,ssm框架在插入数据到mysql数据库时,中文乱码.代码中的编码配置没有问题,因为该项目代码以前使用过,没有问题.现在换了数据库,数据库配置也做了修改,统一使用utf8, ...

  10. Android为TV端助力 Intent匹配action,category和data原则

    1.当你在androidmanifest里面定义了一个或多个action时 你使用隐式意图其他activity或者service时,规定你隐式里面的action必须匹配XML中定义的action,可以 ...