processing:使用processing.net向flask发送请求并接收响应

这篇具有很好参考价值的文章主要介绍了processing:使用processing.net向flask发送请求并接收响应。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、processing.net.*的使用

Network Library使在互联网上跨机器读写数据成为可能,它允许在processing中创建客户端和服务器,客户端能够读取数据并将数据写入服务器

Client

客户端连接到服务器并来回发送数据,如果连接出现问题,则会引发异常

import processing.net.*; 

Client client; 
int data; 
 
void setup() { 
  size(200, 200); 
  // Connect to the local machine at port 1252.
  // This example will not run if you haven't
  // previously started a server on this port.
  client= new Client(this, "127.0.0.1", 1252); 
} 
 
void draw() { 
  if (myClient.available() > 0) { 
    data = client.read(); 
    println(data);
  } 
} 

Constructors:Client(parent, host, port)
Parameters:
-parent:通常使用"this"
-host:服务器地址
-port:从服务器上读取/写入的端口

methods

available()

返回可用的字节数,当任何客户端都有来自服务器的可用字节时,它会返回字节数

write()

将数据写入构造客户端时指定的服务器,或将数据写入从server available()方法获得的特定客户端。

// 2A: 共享绘图画布 (服务器)
import processing.net.*;
Server s; 
Client c;
String input;
int data[];
void setup() { 
  size(450, 255);
  background(204);
  stroke(0);
  frameRate(5); // 慢下来一点
  s = new Server(this, 12345);  // 在端口上启动简单服务器
} 
void draw() { 
  if (mousePressed == true) {
    // 划清界限
    stroke(255);
    line(pmouseX, pmouseY, mouseX, mouseY); 
    // 将鼠标坐标发送给其他人
    s.write(pmouseX + " " + pmouseY + " " + mouseX + " " + mouseY + "\n");
  }
  
  // 从客户端接收数据
  c = s.available();
  if (c != null) {
    input = c.readString(); 
    input = input.substring(0, input.indexOf("\n"));  // 只换行符
    data = int(split(input, ' '));  // 将值拆分为数组
    // 使用接收坐标绘制直线
    stroke(0);
    line(data[0], data[1], data[2], data[3]); 
  }
}
// 2B: 共享绘图画布 (客户端)
import processing.net.*; 
Client c; 
String input;
int data[]; 
void setup() { 
  size(450, 255); 
  background(204);
  stroke(0);
  frameRate(5); // 慢下来一点
  // 连接到服务器的 ip地址和端口
  c = new Client(this, "127.0.0.1", 12345); //替换为服务器的 IP 和端口
} 
void draw() {         
  if (mousePressed == true) {
    // 划清界限
    stroke(255);
    line(pmouseX, pmouseY, mouseX, mouseY); 
    // 将鼠标坐标发送给其他人
    c.write(pmouseX + " " + pmouseY + " " + mouseX + " " + mouseY + "\n");
  }
  //从服务器接收数据
  if (c.available() > 0) { 
    input = c.readString(); 
    input = input.substring(0,input.indexOf("\n"));  // 只换行符
    data = int(split(input, ' '));  // 将值拆分为数组
    // 使用接收坐标绘制直线
    stroke(0);
    line(data[0], data[1], data[2], data[3]); 
  } 
}
readString()

以字符串形式返回缓冲区中的所有数据

stop()

断开与服务器的连接,用于在完成客户端操作后关闭连接

2、python flask的使用

请参考以下三篇文章:
1、Flask入门(一):https://blog.csdn.net/julac/article/details/121257519?spm=1001.2014.3001.5502
2、Flask入门(二)模板:https://blog.csdn.net/julac/article/details/121267284?spm=1001.2014.3001.5502
3、flask入门(三)静态文件:https://blog.csdn.net/julac/article/details/121270106?spm=1001.2014.3001.5502

3、request headers的常见字段

HTTP请求头第一行

在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本

举个例子,假设在浏览器中输入http://example.com/ajax并访问,那么浏览器会发送一个GET /ajax HTTP/1.1的HTTP请求给example.com服务器的/ajax路径,服务器接收到请求后,会寻找对应的资源或处理程序,并将响应内容返回给浏览器,浏览器根据响应内容渲染页面或执行相应的操作。

Content-Type

Content-Type: application/x-www-form-urlencoded 是HTTP请求头中的一个字段,用于指示请求体中的数据编码格式,将表单数据按照 URL 编码规则进行编码。它通常用于POST请求或PUT请求中,用于传递表单数据给服务器。
在这种编码方式下,请求体数据被格式化成 key1=value1&key2=value2... 的形式,其中键值对之间使用 & 进行连接,键和值之间使用 = 进行连接。例如,一个简单的表单数据编码后的数据可能如下所示:

name=John+Doe&age=30&email=john@example.com

在这个例子中,有三个键值对,分别是 name、age 和 email,对应的值分别是 John Doe、30 和 john@example.com。注意,空格被编码成 +,特殊字符(如空格、&、=等)被进行了 URL 编码

Host

在HTTP请求中,请求头包含了一些键值对,用于描述请求的各种属性。其中 Host 是一个必需的请求头字段,在客户端向服务器发送请求时必须包含。
当客户端发送一个HTTP请求时,它需要知道请求要连接的服务器的位置,也就是请求的目标。Host 请求头字段告诉服务器请求的目标是哪个主机。服务器会根据 Host 字段中指定的主机名或IP地址,找到对应的资源或处理程序,并处理请求。

Content-Length

Content-Length 是HTTP请求头或响应头的一部分,用于指示请求体或响应体的长度,以字节为单位。
在HTTP请求中,当客户端向服务器发送带有请求体(例如POST请求)的请求时,可以使用 Content-Length 请求头字段来指示请求体的长度。服务器可以根据这个字段的值来准确地读取请求体,并确保接收完整的请求数据。
在HTTP响应中,当服务器向客户端返回带有响应体的响应时,可以使用 Content-Length 响应头字段来指示响应体的长度。客户端可以根据这个字段的值来准确地读取响应体,并确保接收完整的响应数据。
Content-Length 字段的值是一个十进制整数,表示请求体或响应体的长度(以字节为单位)。例如,Content-Length: 1024 表示请求体或响应体的长度为1024字节。
在HTTP协议中,Content-Length 字段通常用于在请求和响应中确定消息体的大小,这对于在网络中准确传输数据非常重要。服务器和客户端都依靠这个字段来确保请求和响应的完整性和正确性。

4、实战

python flask服务器:

from flask import Flask, jsonify,request
from flask_cors import CORS

app = Flask(__name__)
CORS(app)


@app.route("/ajax")
def ajax_test():
    print(request.form.get("name"))
    message = {
        "content": "hello world"
    }

    return jsonify(message)


if __name__ == "__main__":
    app.run(port=1252)

processing客户端:

import processing.net.*;

Client client;
String serverIP = "127.0.0.1";
int serverPort = 1252;

void setup() {
  size(400, 200);
  client = new Client(this, serverIP, serverPort);
  
  // 向Flask发送GET请求
  //String dataToSend = "Hello, Flask!";
  String dataToSend = "name=" + urlEncode("John Doe") + "&age=" + urlEncode("30") + "&email=" + urlEncode("john@example.com");
  client.write("GET /ajax HTTP/1.1\r\n");
  client.write("Host: " + serverIP + "\r\n");
  client.write("Content-Type: application/x-www-form-urlencoded\r\n");
  client.write("Content-Length: " + dataToSend.length() + "\r\n");
  client.write("\r\n");
  client.write(dataToSend);
}

void draw() {
  // 检查是否有响应
  if (client.available() > 0) {
    // 读取响应
    String response = client.readString();
    println("Received response: \n" + response);
    // 关闭连接
    client.stop();
  }
}

具体代码请参考:
processing-flask:https://github.com/Charles-yueyue831/processing-flask

参考文献

1、network:https://processing.org/reference/libraries/net/index.html
2、ChatGPT
3、HTTP 请求头字段大全| HTTP Request Headers:https://www.flysnow.org/tools/table/http-request-headers/
4、【20】processing-通讯(中文):https://blog.csdn.net/zd623949282/article/details/107346164/文章来源地址https://www.toymoban.com/news/detail-602396.html

到了这里,关于processing:使用processing.net向flask发送请求并接收响应的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用HTTP方式发送请求及json数据的接收和解析

    目录 需求 请求端 1,添加依赖 2,请求对象 3,请求工具类 4,请求测试(事先开启接收端的服务) 接收端 数据请求模拟 本项目需要通过向对端第三方项目发送一个http的post类型的请求,并且指定了一些请求字段,数据传输采用了json,对请求头没有其他特殊要求,所以这里写

    2024年01月17日
    浏览(43)
  • Postman如何使用(一):导入导出和发送请求查看响应

    在Postman中导入导出我们的 测试数据包 和 工作环境 非常的方便: 导出数据包的方法如下: 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:

    2024年02月03日
    浏览(32)
  • 使用 Vert.x 异步发送HTTP长阻塞请求来提高并发响应

    假设我们开发了一个必须与其他HTTP服务来交互的服务。不幸的是,这些HTTP服务速度慢且是阻塞的。 它可能是一个非常慢的遗留HTTP服务或我们必须使用的一些阻塞 API。无论如何,我们无法控制它。在这里,我们将调用两个HTTP API。其中一个将阻塞2秒钟,另一个将阻塞5秒钟。

    2024年02月03日
    浏览(45)
  • vue使用axios发送post请求携带json body参数,后端使用@RequestBody进行接收

    最近在做自己项目中,做一个非常简单的新增用户场景,但是使用原生axios发送post请求的时候,还是踩了不少坑的。 唉,说多了都是泪,小小一个新增业务,在自己前后端一起开发的时候,硬是搞了好久。 下面就把问题总结分享下,防止后人再踩坑。 首先先看下我的接口定

    2024年02月02日
    浏览(40)
  • vue3使用axios发送post请求,后台接收到的参数总是null,使用postman测试后台是能接收数据的

    使用vue3,连基本的请求都失败了,使用浏览器查看post请求,参数中是有值,但是传到后台,每个参数都是null,不知道哪里错了。排除了后台的错误,就剩下了vue代码的错误了。我出错的地方是vue使用axios发送post请求的时候,参数格式写错了。 直接贴代码了,正确的写法 f

    2024年02月13日
    浏览(34)
  • 在Vue中使用axios发送post请求时,可能会出现后端无法接收到参数的情况。

    在Vue中使用axios发送post请求时,可能会出现后端无法接收到参数的情况。这个问题的原因是axios默认发送的请求是json格式的,而后端接收的请求是form表单格式的,这就导致后端无法获取json格式的请求参数。解决这个问题可以通过设置axios的请求头部信息,将请求格式设置为

    2024年02月16日
    浏览(35)
  • 请求响应-json参数的接收

    JSON参数:JSON数据 键名 与形参对象 属性名 (即实体类中的成员变量)相同,定义POJO实体类即可接收参数,需要使用 @RequestBody 标识,将请求体的数据封装到对应的参数中。 前端发送JSON格式的数据,要使用 POST 方法发送请求,因为JSON格式的数据要放在请求体中, 而GET请求方

    2024年02月15日
    浏览(37)
  • flask项目请求与响应

    项目名: static (静态) js css templates (模板) app.py (运行) web项目 mvc: model 模型 view 视图 controller 控制器 mtv model (模型) templates (模板) -- html view 视图 (python代码) 起控制作用 b/s browser server 浏览器服务器 c/s client server 客户端服务器 flask 的第一个程序 什么是WSGI web服务器网关接口,

    2024年02月09日
    浏览(24)
  • (十)Flask请求和响应

    在Flask中,可以使用 request 对象来获取和处理当前请求的相关信息。 request 对象是一个全局对象,可以在任何视图函数中直接使用。 需要注意的是,在使用 request 对象之前,需要先导入它: 以下是 request 对象的一些常用属性和方法: 1. method :是一个属性,获取当前请求的

    2024年02月04日
    浏览(24)
  • flask-----请求和响应,session

     1 所有web:请求对象,响应对象(go,java,ptyhon) 2 flask请求对象,全局的request 3 flask的响应 4 session flask中是全局session session的运行机制 源码分析,看运行机制

    2024年02月14日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包