socket

3.socket编程示例

♀尐吖头ヾ 提交于 2020-02-17 05:09:30
#block_server.py 非阻塞IO示例#有个疑惑:下面的connfd的blockind要设置为True,不然会出错,待解决from socket import *from time import ctime,sleeps = socket()s.bind(("0.0.0.0",18888))s.listen(10)#设置s为非阻塞状态s.setblocking(False)while True: print("等待连接...") try: connfd,addr = s.accept() except BlockingIOError: sleep(2) print(ctime()) continue print("connect from",addr) while True: connfd.setblocking(True) data = connfd.recv(1024) if not data: break print(data.decode()) serv_msg = input("服务端消息>") connfd.send(serv_msg.encode()) connfd.close()s.close()=========================================#timeout_server.py 超时检测示例及tracebackfrom

LNMP架构——掌握LNMP基础知识

笑着哭i 提交于 2020-02-16 23:16:39
文章目录 一、什么是LNMP? 二、了解LNMP工作原理 三、cgi(Common Gateway Interface、通用网关接口) 四、什么是fast-cgi 五、php-fpm(php-Fastcgi Process Manager) 六、Nginx+FastCGI运行原理 一、什么是LNMP? LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。 LNMP是目前网站主流架构之一,LNMP中L指linux系统平台,N是nginx指网站的前端程序,发布静态页面和调用外部程序解析动态页面,M是mysql指网站的后台数据库,P是PHP指网页编程语言,是作为一个独立服务存在的,这个服务叫做php-fpm, Nginx直接处理静态请求,动态请求会转发给php-fpm。 与LNMP对应的是LAMP,LAMP是指Linux、Apache、MySQL和PHP的结构体系。 二、了解LNMP工作原理 浏览器发送http请求给服务器nginx上,nginx将这个请求转发给fast-cgi模块,fast-cgi去与php-fpm通信,php-fpm调用php解析器解析,将解析结果原路返回直到浏览器上,最终浏览器解析内容渲染。 三、cgi(Common Gateway Interface、通用网关接口) 早期的web服务器只能处理html等静态文件,但是随着技术的发展

socket实现文件上传(客户端向服务器端上传照片示例)

為{幸葍}努か 提交于 2020-02-16 14:06:19
本示例在对socket有了基本了解之后,可以实现基本的文件上传。首先先介绍一下目录结构,server_data文件夹是用来存放客户端上传的文件,client_data是模拟客户端文件夹(目的是为了测试文件夹下的文件能否上传) ,还有两个主要的py文件,onload_server.py onload_client.py 。 目录结构如图: 下面直接上两段主要py文件代码: 客户端(上传端)代码: 1 #__author__:Kelvin 2 #date:2020/2/16 11:09 3 4 import socket,os 5 6 sk=socket.socket() 7 address=("127.0.0.1",8000) 8 sk.connect(address) 9 10 while True: 11 inp=input("请输入 命令|文件名:") # post|a.jpg 12 size=os.path.getsize(inp.split("|")[1]) 13 # print(size) 14 inp=inp+"|%s"%size 15 sk.send(inp.encode("utf8")) 16 sk.recv(1024) # 接收 避免粘包发送的无效数据 17 f=open(inp.split("|")[1],"rb") 18 sent_size=0 19

2.1.2 BIO阻塞式网络编程

孤者浪人 提交于 2020-02-16 12:20:30
BIO - 阻塞IO的含义 阻塞(blocking) IO: 资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。 非阻塞(non-blocking) IO: 资源不可用时,IO请求离开返回,返回数据标识资源不可用。 同步(synchronous) IO: 应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败。 异步(asynchronous) IO: 应用发送或接收数据后立刻返回,实际处理是异步执行的。 阻塞和非阻塞是获取资源的方法 , 同步/异步是程序如何处理资源的逻辑设计 。 代码中使用的API: ServerSocket#accept 、 InputStream#read 都是阻塞的API。操作系统底层API中,默认Socket操作都是 Blocking 型, send/recv 等接口都是阻塞的。 带来的问题:阻塞导致在处理网络I/O时,一个线程只能处理一个网络连接。 一个简单的BIOclient public class BIOclient { public static void main ( String [ ] args ) throws IOException { Socket socket = new Socket ( "localhost" , 8080 ) ; OutputStream outputStream = socket .

解读python中SocketServer源码

你。 提交于 2020-02-15 15:11:07
# 为什么会出现黏包现象? # 首先只有在TCP协议中才会出现黏包现象, # 是因为TCP协议是面向流的协议 # 在发送的数据传输的过程中还有缓存机制来避免数据丢失 # 因此 在连续发送小数据的时候 以及接收大小不符的时候都容易出现黏包现象 # 本质还是因为我们在接收数据的时候不知道发送的数据的长短 # 解决黏包问题 # 在传输大量数据之前先告诉接收端要发送的数据大小 # 如果想更漂亮的解决问题,可以通过struct模块来定制协议 1,解决方案一   问题的根源在于,接收端不知道发送端将要传送的字节流的长度,所以解决粘包的方法就是围绕,如何让发送端在发送数据前,把自己将要发送的字节流总大小让接收端知晓,然后接收端来一个死循环接收完所有数据。 #_*_coding:utf-8_*_ import socket,subprocess ip_port=('127.0.0.1',8080) s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind(ip_port) s.listen(5) while True: conn,addr=s.accept() print('客户端',addr) while True: msg

使用socket方式连接Nginx优化php-fpm性能

丶灬走出姿态 提交于 2020-02-15 04:34:27
使用socket方式连接Nginx优化php-fpm性能 Nginx连接fastcgi的方式有2种:TCP和unix domain socket 什么是Unix domain socket?—— 维基百科 Unix domain socket 或者 IPC socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。与管道相比,Unix domain sockets 既可以使用字节流和数据队列,而管道通信则只能通过字节流。Unix domain sockets的接口和Internet socket很像,但它不使用网络底层协议来通信。Unix domain socket 的功能是POSIX操作系统里的一种组件。 Unix domain sockets 使用系统文件的地址来作为自己的身份。它可以被系统进程引用。所以两个进程可以同时打开一个Unix domain sockets来进行通信。不过这种通信方式是发生在系统内核里而不会在网络里传播。 TCP和unix domain socket方式对比 TCP是使用TCP端口连接127.0.0.1:9000 Socket是使用unix domain socket连接套接字/dev/shm/php-cgi.sock( 很多教程使用路径/tmp,而路径/dev/shm是个tmpfs,速度比磁盘快得多 )

python socket编程

梦想的初衷 提交于 2020-02-15 00:50:38
  Socket源于Unix的“一切借文件”的思想,简而言之就是类似与file的:打开——读写——关闭的操作,file针对与文件进行操作,socket针对与服务器和客户端进行操作。基于网络进行通信,必然逃不开各种网络协议,为了快速开发,在应用层和传输层之间加入socket层,从而将tcp(udp)的协议进行封装,便于进行开发。   首先写一个简单的基于socket的网络通信 1 # import socket 2 from socket import * 3 ip_port=('127.0.0.1',8080) 4 back_log=5 5 buffer_size=1024 6 7 tcp_client=socket(AF_INET,SOCK_STREAM) 8 tcp_client.connect(ip_port) 9 10 while True: 11 msg=input('>>: ').strip() 12 if not msg:continue 13 tcp_client.send(msg.encode('utf-8')) 14 print('客户端已经发送消息') 15 data=tcp_client.recv(buffer_size) 16 print('收到服务端发来的消息',data.decode('utf-8')) 17 18 tcp_client.close()

1网络编程基础概念

≯℡__Kan透↙ 提交于 2020-02-14 23:37:04
1.OSI 七层模型 1.定义: 1.应用层:提供用户服务,具体内容由特定程序规定 2.表示层:提供数据的压缩解压和加密等 3.会话层:建立程序级的连接,决定使用什么样的传输服务 4.传输层:提供合适的通信服务,流量控制(本节内容主要研究这层) 5.网络层:路由选择,网络互联,分组传输 6.链路层:提供链路交换,具体消息发送 7.物理层:物理硬件,接口 2.优点:将功能分开,降低网路传输中的耦合度,每一部分完成自己的功能,开发更清晰 3.编程原则:高内聚低耦合 1.高内聚:让模块的功能尽可能单一 2.低耦合:模块之间尽量减少相互的关联和影响 4.简化四层模型: 1.应用层:应用层 表示层 会话层 2.传输层:传输层 3.网络层:网络层 4.物理链路层:链路层 物理层 5.简化五层模型:(TCP/IP模型) 1.应用层:应用层 表示层 会话层 2.传输层:传输层 3.网络层:网络层 4.链路层: 5.物理层:2.网络协议:网络通信中,各方必须遵守的规定,包括建立什么连接,如何识别,消息结构等 1.应用层:http smtp dns tftp 2.传输层:tcp udp 3.网络层:ip3.网络概念 1.主机:计算机的名称(本机:localhost) 2.ip 1.本机测试ip:127.0.0.1 2.代表局域网内任意可用ip:0.0.0.0 3.表示网段,代表本网段任意可用ip

web框架原理

大兔子大兔子 提交于 2020-02-14 23:10:47
http协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。 HTTP特点 1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。 由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 3.无连接

Java 之 TCP 通信程序

一笑奈何 提交于 2020-02-14 00:22:43
一、TCP协议概述   TCP(Transmission Control Protocol,传输控制协议)被称作一种端对端协议。是一种面向连接的、可靠的、基于字节流的传输层的通信协议,可以连续传输大量的数据。   这是因为它为当一台计算机需要与另一台远程计算机连接时,TCP协议会采用“三次握手”方式让它们建立一个连接,用于发送和接收数据的虚拟链路。数据传输完毕TCP协议会采用“四次挥手”方式断开连接。   TCP协议负责收集这些信息包,并将其按适当的次序放好传送,在接收端收到后再将其正确的还原。TCP协议保证了数据包在传送中准确无误。TCP协议使用重发机制,当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体确认信息,如果没有收到另一个通信实体确认信息,则会再次重复刚才发送的消息。   TCP 通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server)。   两端通信时步骤:      1、服务端程序,需要事先启动,等待客户端的连接;     2、客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。   在 Java 中,提供了两个类用于实现 TCP 通信程序:      1、 客户端 :java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务器响应请求