node中一个基本的HTTP客户端向本地的HTTP服务器发送数据

上一篇讲到了node可以轻松的向其他请求数据.

这一篇就来讲讲向本地服务器的数据交互.

HTTP服务器代码,s.js

 1 var http=require("http");
 2 var server=http.createServer(function(req,res){
 3     if(req.url!=="/favicon.ico"){
 4         req.on("data",function(data){
 5             console.log("服务器接受到的数据:"+data);
 6             res.end();
 7         })
 8     }
 9 });
10 server.listen(1337,"127.0.0.1",function(){
11     console.log("开始监听端口"+server.address().port+".....");
12 });

HTTP客户端代码,c.js:

 1 var http=require("http");
 2 var options={
 3     hostname:"localhost",
 4     port:1337,
 5     path:"/",
 6     method:"POST"
 7 };
 8 var req=http.request(options);
 9 req.write("你好");
10 req.end("再见.");

先运行服务器端代码,在运行客户端代码;结果是:

既然服务器可以接受客户端的代码,理所当然的是可以向客户端发送数据.

修改上面的代码,s.js:

 1 var http=require("http");
 2 var server=http.createServer(function(req,res){
 3     if(req.url!=="/favicon.ico"){
 4         req.on("data",function(data){
 5             console.log("服务器接受到的数据:"+data);
 6             res.write("来自于服务器端的你好!!");
 7             res.write("来自于服务器端的再见!!");
 8             res.end();
 9         });
10     }
11 });
12 server.listen(1337,"127.0.0.1",function(){
13     console.log("开始监听端口"+server.address().port+".....");
14 });

c.js代码:

 1 var http=require("http");
 2 var options={
 3     hostname:"localhost",
 4     port:1337,
 5     path:"/",
 6     method:"POST"
 7 };
 8 var req=http.request(options,function(res){
 9     res.on("data",function(chunk){
10         console.log("客户端接收到的数据:"+chunk);
11     });
12 });
13 req.write("你好");
14 req.end("再见.");

运行代码:

s.js:

c.js:

http.ServerResponse对象的addTrailers方法在服务器端响应数据的尾部追加一个头信息,在客户端接受到这个被追加的数据之后,可以在回调函数中通过回调函数的参数的参数值对象,即一个http.IncomingMessage对象的trailers属性获取信息.

继续修改上面的代码:

s.js

 1 var http=require("http");
 2 var server=http.createServer(function(req,res){
 3     if(req.url!=="/favicon.ico"){
 4         req.on("data",function(data){
 5             console.log("服务器接受到的数据:"+data);
 6             res.write("来自于服务器端的你好!!");
 7             res.write("来自于服务器端的再见!!");
 8             //res.end();
 9         });
10         req.on("end",function(){
11             res.addTrailers({"Content-MD5":"7895bf4b8828b55ceaf47747b"});
12             res.end();
13         });
14     }
15 });
16 server.listen(1337,"127.0.0.1",function(){
17     console.log("开始监听端口"+server.address().port+".....");
18 });

c.js

 1 var http=require("http");
 2 var options={
 3     hostname:"localhost",
 4     port:1337,
 5     path:"/",
 6     method:"POST"
 7 };
 8 var req=http.request(options,function(res){
 9     res.on("data",function(chunk){
10         console.log("客户端接收到的数据:"+chunk);
11     });
12     res.on("end",function(){
13         console.log("Trailer头信息:%j",res.trailers);
14     });
15 });
16 req.write("你好");
17 req.end("再见.");

运行代码:

s.js

c.js

不知道为什么客户端的信息会重复输出两遍.

有哪位大神知道的,敬请指点.

拜拜,睡觉.

时间: 2024-10-13 21:23:23

node中一个基本的HTTP客户端向本地的HTTP服务器发送数据的相关文章

C语言Socket-单工通信(客户端向服务器发送数据)

服务端(server) #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") //把ws2_32.lib加到Link页的连接库 #define PORT 15001 //通信的端口(指服务器端) #define ERROR 0 #define BUFFER_SIZE 1024 //注意:此Server端数据接收缓冲区 >= Client端数据发送缓冲区 ,否则造

一个客户端向服务器发送数据,服务器向连接的客户端转发数据demo

服务端代码: // 负责处理每个线程通信的线程类 public class ServerThread implements Runnable { // 定义当前线程所处理的Socket Socket s = null; // 该线程所处理的Socket所对应的输入流 BufferedReader br = null; public ServerThread(Socket s) throws IOException { this.s = s; // 初始化该Socket对应的输入流 br = ne

Node中http模块详解(客户端篇)

上一篇说到了http模块的服务器篇,在这个文章里面我们讨论一下http模块的客户端篇 1.http客户端 http模块提供了两个函数http.request和http.get,功能是客户端向服务器端发送请求. 1.1 http.request http.request(options,callback)用于发起http请求,接收两个参数,options是一个类似关联数组的对象,里面包含一些请求的参数,callback表示请求后的回调.options常用的参数如下: 名称 含义 host 请求网站

linux系统中启动mysql方式已经客户端如和连接mysql服务器

零点间的记录 一.启动方式1.使用linux命令service 启动:service mysqld start2.使用 mysqld 脚本启动:/etc/inint.d/mysqld start3.使用 safe_mysqld 启动:safe_mysqld& 二.停止1.使用 service 启动:service mysqld stop2.使用 mysqld 脚本启动:/etc/inint.d/mysqld stop3. mysqladmin shutdown 三.重启1.使用 service

服务器发送数据到另一个服务器上中文出现乱码

问题: 1服务器向2服务器传送数据时,2服务器接收的中文数据为乱码: 解决办法: 配置环境变量:(添加系统变量) 变量名:JAVA_TOOL_OPTIONS 变量值:-Dfile.encoding=UTF-8 遗留问题: tomcat的日志打印会乱码: 原文地址:https://www.cnblogs.com/zmmfeng/p/10155275.html

Node中http模块详解(服务端篇)

Node中的Http Node中提供了http模块,其中封装了高效的http服务器和http客户端 http.server是一个基于事件的HTTP服务器,内部是由c++实现的,接口由JavaScript封装 http.request是一个HTTP客户端工具.用户向服务器发送数据. 下面就来分别得介绍一下http的服务端和客户端 一.HTTP服务器 http.Server实现的,它提供了一套封装级别很低的API,仅仅是流控制和简单的解析,所有的高层功能都需要通过它的接口,就像在前面的文章<Node

uip UDP 服务器广播模式(客户端可以任意端口,并且主动向客户端发送数据)

目前移植uip,发现UDP 服务器模式下,必须指定本地端口以及客户端端口,否则只能讲客户端端口设置为0,才能接收任意端口的数据,但是无法发送数据,因为此时客户端端口设置为0了,我通过将原始数据包中的客户端端口保存下来,并且在发送的时候将客户端端口替换为指定的端口,发送完成之后又设置为0,这样就实现了向任意客户端端口发送数据. uip.c if(uip_udp_conn->lport != 0 && UDPBUF->destport == uip_udp_conn->lpo

C语言 Socket入门示例2——模拟远程CMD(客户端向服务器发送命令,服务端执行该命令)

只要把上一篇文章"C语言 Socket入门示例1"中的两段程序彻底搞懂,那么再看本文就没有任何难度了,因为仅仅是对上篇文章中服务端代码的简单修改扩充.但是简单修改过后,功能变得异常强大,犹如一个远程CMD.随着不断深入学习,功能将会变得越来越强大.欢迎大家评论指点. 1.服务端(Server): #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib")

server-sent-event使用流信息向客户端发送数据

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>server-sent-event</title> </head> <body> <div> <p>server-sent-event 是一种服务器向客户端发送消息的单向通信方式,采用流信息传送数据,类似视频播