socket

如何理解php socket

孤街浪徒 提交于 2020-02-08 15:08:39
  什么是socket?   Socket 是在应用层和传输层之间的一个抽象层,它把 TCP/IP 层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。Socket 起源于 UNIX,在 UNIX 一切皆文件的思想下,进程间通信就被冠名为文件描述符(file descriptor),Socket 是一种“打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个“文件”,在建立连接打开后,可以向文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。   如图为Socket所在位置:   Socket 通信过程   Socket 保证了不同计算机之间的通信,也就是网络通信。对于网站,通信模型是服务器与客户端之间的通信。两端都建立了一个 Socket 对象,然后通过 Socket 对象对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。   相关学习视频教程分享:php视频教程   下图是面向连接的 TCP 时序图:   客户端过程:   客户端的过程比较简单,创建 Socket,连接服务器,将 Socket 与远程主机连接(注意:只有 TCP 才有“连接”的概念,一些 Socket 比如 UDP、ICMP 和 ARP 没有“连接”的概念),发送数据,读取响应数据,直到数据交换完毕,关闭连接,结束 TCP 对话。   这里也可用 send() 方法

网络编程

左心房为你撑大大i 提交于 2020-02-08 14:04:18
主要内容 软件架构CS/BS 网络通信三要素 TCP通信 Socket套接字 ServerSocket 学习目标 [ ] 能够辨别UDP和TCP协议特点 [ ] 能够说出TCP协议下两个常用类名称 [ ] 能够编写TCP协议下字符串数据传输程序 [ ] 能够理解TCP协议下文件上传案例 第一章 网络编程入门 1.1软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 两种架构各有优势,但是无论哪种架构,都离不开网络的支持。 网络编程 ,就是在一定的协议下,实现两台计算机的通信的程序。 1.2 网络通信协议 网络通信协议: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。 TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本、最广泛的协议

Python学习day34-面向对象和网络编程总结

*爱你&永不变心* 提交于 2020-02-08 09:45:59
/*--> */ /*--> */ Python学习day34-面向对象和网络编程总结 面向对象及高阶 类与对象 属性查找 绑定方法 对象之间的交互 面向对象的三大特性 元类 反射 网络编程 网络的概念 五层网络协议 socket编写tcp的客户端和服务端 socket编写udp的客户端和服务端 tcp和udp的特点 Python学习day34-面向对象和网络编程总结 面向对象及高阶 类与对象 类:是一系列共同的属性和方法 对象:是属性和方法的结合体 属性查找 包括数据属性和方法. 数据属性:对象中找-->类中-->父类(按照 __mro__ 查找,Python2中没有mro列表)-->obj-->报错 方法查找:对象的绑定方法-->类中-->父类(按照 __mro__ 查找,Python2中没有mro列表)-->obj-->报错 绑定方法 定义在类内部的没有被任何装饰器装饰的函数,就是方法 给对象用的,对象.方法(默认把自身作为第一个参数传过去) 类来调用,就是普通函数,有几个值就传几个值 对象之间的交互 把一个对象传到另一个对象中,从而操作这个对象 面向对象的三大特性 -继承: -在类名后的括号中写要继承的类,用逗号分隔 -python中支持多继承,java只支持单继承(属性查找顺序) -新式类和经典类: -继承了object的类都叫新式类,Python3中都是新式类

Python TCP接收/发送信息

点点圈 提交于 2020-02-08 05:09:31
一 简单介绍一下几个知识点 TCP : 他是 传输控制协议 是 是一种面向连接的、基于字节流的传输层通信协议 . 这种连接是 一对一 的,因此TCP不适用于广播的应用程序, 基于广播的应用程序请使用UDP协议。 socket : 套接字,是一个模块,我们用它来完成收发信息 网路协议版本 : IPV4 和 ipv6 , 因为后者还没有推广开,所有现在普遍还是用的IPV4版本. ip,和端口 :要给谁发送,就写谁的ip(这里就写自己本地ip就行要是不知道就打开cmd输入ipconfig查看) ; 端口号就随便用一个(除知名端口) encode :就是编码,把字符串转换成字节,因为sendto方法的格式.(反之 decode 就是解码) 二 tcp接收信息(TCP服务器): 因为tcp协议是一对一的连接,所以要先创建一个接收信息的 服务器 简单来说有六个步骤 导入socket模块 创建TCP套接字 绑定ip和port 设置为被动监听模式 最大并发接收的数量是128(设置监听模式才能是服务器) 等待接收链接请求 接收到的是一个元组 (客户端的socket对象包含了:(客户端的地址,端口)) 关闭套接字 下面直接看代码: ↓ (因为ip的问题,测试时把WiFi关掉) # 导包 import socket # 2初始化套接字 tcp_socket = socket . socket (

04python 黏包(python网络编程)

╄→尐↘猪︶ㄣ 提交于 2020-02-08 05:04:30
什么叫做黏包? 先写一个小补充: encode()函数、decode()函数: encode() 是将数据类型转换成bytes类型decode()是将bytes类型转换成其他类型encode() 叫做编码, decode( ) 叫做解码 通过一段代码来引出黏包现象(基于TCP的网络通信) sever端 import socket sk = socket.socket() sk.bind(('127.0.0.1', 8080)) sk.listen() conn, addr = sk.accept() while True: cmd = input('>>>') conn.send((cmd.encode('utf-8'))) # 将输入的数据转换层(utf-8)的bytes类型,用于网络传输 ret = conn.recv(1024).decode('utf-8') # 将接收到的数据(utf-8)的bytes类型数据,解码成本身的数据类型 print(ret) conn.close() sk.close() 19 1 import socket 2 3 4 sk = socket.socket() 5 sk.bind(('127.0.0.1', 8080)) 6 sk.listen() 7 8 conn, addr = sk.accept() 9 10 while True:

开启进程的两种方式

我只是一个虾纸丫 提交于 2020-02-08 03:17:56
一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进程。 Python提供了multiprocessing。 multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。multiprocessing模块的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,>提供了Process、Queue、Pipe、Lock等组件。 需要再次强调的一点是:与线程不同,进程没有任何共享状态,进程修改的数据,改动仅限于该进程内。 二 Process类的介绍 创建进程的类: Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,可用来开启一个子进程 强调: 1. 需要使用关键字的方式来指定参数 2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号 参数介绍: group参数未使用,值始终为None target表示调用对象,即子进程要执行的任务 args表示调用对象的位置参数元组,args=(1,2,'egon',) kwargs表示调用对象的字典

网络基础相关内容

十年热恋 提交于 2020-02-08 01:00:00
帅爆太阳的男人 1,网络基础相关的知识 1.1>架构 1.1.1>c/s架构:client客户端和server服务器端 优势:能充分发挥pc机的性能 1.1架构.2>b/s架构:browser浏览器和server服务器,隶属于c/s架构 b/s架构 统一了应用的接口 1.2>通信的事: 1.2.1>同一台电脑上两个py程序通信:打开一个文件 1.2.2>两个电脑通信:连一个网线 1.2.3>多个电脑通信: eg:电脑1(源)要找电脑2(目标) 电脑1首先发送一个请求帧,里边包含(电脑1的IP地址:192.168.1.1,电脑1的mac的地址:xxxxx,寻求目标的IP地址为192.168.1.2de 主机)把这条请求帧交给交换机,交换机以广播的形式传给其他所有的主机 所有主机接收到消息后,都会对比自己的IP地址,当目标主机的的IP地址和区广播的IP地址一致时,回复给交换机(回复的内容包括自己的IP地址和mac地址) 此时交换机以单播的形式返回给源主机 2,知识点 2.1>mac地址:是一个物理地址,全球唯一,是有网卡制造商分配的,类似于身份证 2.2>IP地址:是一个四位点分十进制,它表示了计算机在网络中的位置,类似于学号 2.3>交换机的通信方式: 广播:放射状信息(吼一嗓子) 单播:一对一 组播:一对多 2.4>arp协议:通过目标IP地址来获取目标的mac地址的一个协议 2

Go语言之socket编程

拥有回忆 提交于 2020-02-08 00:56:05
socket编程 服务端的处理流程 a. 监听端口(为什么一般没有,因为默认是80,隐藏了) b. 接收客户端的链接 c. 创建goroutine,处理该链接 客户端的处理流程 a. 建立与服务端的链接 b. 进行数据收发 c. 关闭链接 网络协议 TCP/IP协议 一般默认为4层即可:链路层、网络层、传输层、应用层 链路层:处理MAC地址,设备到设备 网络层:处理IP地址,主机到主机 传输层:处理数据传输,进程到进程 应用层:处理应用,应用程序 层和协议 每一层自己的协议 链路层 ARP:设备到设备(网卡、MAC),通过ip找mac 网络层 ping 172.0.0.1 传输层 TCP:文件传输、安全、慢 UPD:例如聊天相关、不安全、快 复习知识 网卡:网卡就是标识,网卡地址—>物理地址(MAC),广播时为了避免广播风暴,根据ip,仅在当前局域网内寻找目的mac地址 打包解包 C/S模型 客户机-服务机模型 服务端例子 package main import ( "fmt" "net" ) func main ( ) { // 监听 listener , err := net . Listen ( "tcp" , "192.0.0.1:8000" ) if err != nil { fmt . Println ( "err:" , err ) } defer listener

网络编程

偶尔善良 提交于 2020-02-08 00:20:15
IP地址分成两部分 网络部分:标识子网(子网掩码) 主机部分:标识主机(ip地址) 172.16.10.2:10101100.00010000.00001010.000000010 (ip) 255 255.255.255.0:11111111.11111111.11111111.00000000 (掩码) 172.16.10.0 (局域网地址) 都为1取1,其他取0 Arp协议解析IP得到子网地址(进而获取对方ip的mac地址) 局域网的ip(自动分配,动态的),mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址 两个ip子网地址一样:同一局域网>>>以太头(原mac,fffff?) ip头(ip1 ip2 ) 数据----通过交换机---->每台机器发一份,只有ip为ip2的机器响应并返回mac       不一样:不同局域网>>>以太头(原mac,fffff?) ip(ip1 路由器ip)头 端口头 数据-----通过交换机----->每台发一份,路由器(网关默认第4部分为1)响应,返回mac1                 以太头(mac1路由,fffff?)ip(ip路由1,ip2子网)-----路由协议------>返回ip2子网,路由mac2                 以太头(mac2路由,fffff?) ip(ip路由2,ip2)--------

Python------网络编程3

我只是一个虾纸丫 提交于 2020-02-07 23:54:06
socket 套接字(模块):负责从传输层接收数据,并进行处理,并由底层交给操作系统。 作用 避免计算机学习各层的接口与协议的使用, socket 已经封装好了所有的接口,使用方便,提升开发效率。 socket 本质是一个模块。通过使用学习模块提供的功能,建立客户端与服务端的通信,使用方便. Socket 实现单个客户与服务端单通信: 服务端: import socket # 1. 创建socket对象(买手机) phone = socket.socket() # 可以默认不写 # 2. 绑定ip地址和端口(办卡) phone.bind(('127.0.0.1', 8848)) # 本地回环地址 # 3. 监听.(开机状态) phone.listen(5) # 4. 接收连接 print('start') conn, addr = phone.accept() # 程序暂进入待机状态,等待用户端发送信息 print(conn,addr) from_client_data = conn.recv(1024) # 至多接收1024个字节 print(f'来自客户端{addr}消息{from_client_data.decode("utf-8")}') to_client = input('>>>') conn.send(to_client.encode('utf-8')) conn