Nodejs简单的套接字连接不工作

每2秒客户机请求的数据app.get("/query_data"..我是连接到一个特定的IP地址+端口。

连接后,我发送一个字符串到这个地址来接收数据。 这工作得很好,但只有一次。

var socket = new net.Socket();
app.get("/query_data", function (req, res) {
socket.connect(2711, ‘192.168.1.173‘, function (err) {
if (err) {
console.log(err);
}
else {
socket.write("d"); // send "d" to trigger socket.on("data")
}
});

socket.on(‘data‘, function (data) {
res.send(data);
});
});
我收到错误消息:

错误(ERR_HTTP_HEADERS_SENT):不能设置标题后发送 到客户端
然而,当我把var socket = new net.Socket();内部app.get()它的工作原理。

app.get("/query_data", function (req, res) {
var socket = new net.Socket();
socket.connect(2711, ‘192.168.1.173‘, function (err) {
if (err) {
console.log(err);
}
else {
socket.write("d");
}
});

socket.on(‘data‘, function (data) {
res.send(data);
});
});
这是为什么呢? 我不希望创建一个新的套接字每次客户端从服务器请求数据。

客户端,它的包装在2秒setTimeout()功能:

$.get("/query_data", function (data) {
data = data.replace(/[[]&]+|nan/g, ‘null‘);
console.log(JSON.parse(data));
(....)
});

原文地址:http://blog.51cto.com/14021402/2315969

时间: 2024-07-30 18:34:47

Nodejs简单的套接字连接不工作的相关文章

Linux/UNIX套接字连接

套接字连接 套接字是一种通信机子.凭借这样的机制.客户/server系统的开发工作既能够在本地单机上进行.也能够夸网络进行. 套接字的创建和使用与管道是有差别的.由于套接字明白地将客户和server区分开来. 套接字连接: 首先,server应用程序用系统调用socket来创建一个套接字,它是系统分配给该server进程的类似文件描写叙述符的资源,它不能与其它进程共享. 接下来.server进程会给套接字起个名字.本地套接字的名字是Linux文件系统中的文件名称,对于网络套接字它的名字是与客户连

PHP Socket(套接字连接)扩展简介和使用方法

PHP socket扩展是基于流行的BSD sockets,实现了和socket通讯功能的底层接口,它可以和客户端一样当做一个socket服务器. 使用这些函数时请注意,虽然他们中有很多和C函数同名的,但声明却很可能不同.未避免混淆,请仔细阅读函数描述. 不熟悉socket编程的可以在Unix手册上找到很多有用的信息,网上也有很多C socket编程方面的教程,简单修改一下就可以应用于PHP socket编程. 第一步:开启socket 到php.ini开启extension=php_socke

TCP/IP网络编程 学习笔记_8 --优雅地断开套接字连接

基于TCP的半关闭 TCP中的断开连接过程比建立连接过程更重要,因为建立连接过程一般不会出现什么大的变数,但断开过程就有可能发生预想不到的情况,因此要准确的掌控. 单方面断开连接带来的问题 Linux的close函数和Windows的closesocket函数是完全断开连接.完全断开是指无法传输数据也不能接收数据.因此,一方这样直接断开连接就显得不太优雅了.如:主机A发送完最后的数据后,调用close函数单方断开了连接,那么最终,由主机B传输的,主机A必须接收的确认数据也销毁了(四次握手). 为

VMware报错:无法连接 MKS: 套接字连接尝试次数太多;正在放弃

环境: win10    VMware pro 14   Cent OS 7 问题详情: 报错:无法连接 MKS: 套接字连接尝试次数太多:正在放弃 解决方案: 1.关闭报错的虚拟机 2.打开控制面板->系统和安全->管理工具->服务 3.找到VMware Authorization Service,鼠标右键选择启动,然后就可以看到状态的改变 4.选中后鼠标右键属性中启动类型设置为自动.下次就会自启动 5.重新打开虚拟机,测试 原文地址:https://www.cnblogs.com/s

虚拟机VMware无法打开,提示无法连接MKS:套接字连接次数太多,正在放弃

问题:虚拟机VMware无法打开,提示无法连接MKS:套接字连接次数太多,正在放弃解决方法:我的电脑- 管理- 服务和应用程序- 服务- (右键)启动下面5个服务:Vmware Authorization ServiceVmware DHCP ServiceVmware NAT ServiceVmware USB Arbitration ServiceVmware Workstation Server 原文地址:https://blog.51cto.com/zhaoshilei/2444078

监听套接字 连接套接字

摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的.它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户程序就可以与自己的客户进行点到点的通信了. accept函数等待并接受客户请求: #include<sys/socket.h> int accept(int sockfd, struct sockaddr* addr, socklen_t* len) 返回:非负描述字——成功, -1——失败 ac

【TCP/IP网络编程】:07优雅地断开套接字连接

本篇文章简单讨论了TCP套接字半关闭的相关知识. 通常来说,TCP建立连接的过程相对稳定,因为此时并未开始进行数据交换:而断开连接的过程由于已发生了数据交换,可能会发生一些预想不到的情况. 单方面断开连接带来的问题 前文所述的内容中,我们直接调用了close函数进行了完全断开连接,这就意味着本端既无法再发送数据,也不能再接收数据了.而如果本端仅仅希望不再发送数据,还能够接收数据的话,直接调用close完全断开连接则显得不够优雅.因此,我们需要一种“只关闭一部分数据交换中使用的流”(Half-cl

TCP/IP网络编程读书笔记-简单的套接字编程(1)

在linux和windows下都是通过套接字编程进行网络编程.不同的系统上通信有部分差别,现在刚开始学习,给自己学习的时候一个总结. 一,socket函数的套接字步骤 第一,linux网络编程中接受连接请求(服务器端)套接字的四个步骤: 1)调用socket函数创建套接字 2)调用bind函数分配IP地址和端口号 3)调用listen函数转为可接收请求状态 4)调用accept函数受理连接请求 第二,linux网络编程中请求连接(客户端)套接字的两个步骤: 1)调用socket函数创建套接字 2

配置Nginx和php-fpm用Sock套接字连接时,找不到php-fpm.sock的原因

转载:http://www.cnblogs.com/zzyyxxjc/p/4361282.html php5.3之后的版本,php-fpm.conf里的listen的默认配置是127.0.0.1:9000,就不会生成php-fpm.sock,因此如果需要Nginx里的配置有链接tmp/php-fpm.sock的话,需要将listen的地址配置成和nginx的配置文件一致,同时保证这个路径已经存在,这样在启动./php-fpm的时候,会在对应路径上自动生成php-fpm.sock,例如: 让PHP