nodejs Net模块之socket建立连接
发布于 6 年前 作者 lovegnep 2898 次浏览 来自 问答

遇到个奇葩问题,仍是没搞明白,看有没有能人帮忙解答下。。。。

环境:WIN7 +NODEJS 8.9

用NET模块创建了一个SOCKET,然后去连接本机的服务器,服务器端口32347,但是没有开启这个服务器。 客户端SOCKET会每隔5秒连接一次服务器,当然,由于服务器没开,肯定连接失败。

但是。。。。经过1天多之后,却发现连接成功了。 然后再CMD下查看网络如下:

c:\users\admin>netstat -nao |findstr 32347
TCP      192.168.3.78:32347     192.168.3.78:32347   ESTABLISHED     10364

这是自己和自己建立成功了呀 另外用C语言模拟了这种情况

#include<stdio.h>  
#include<strings.h>  
#include<unistd.h>  
#include<arpa/inet.h>  
#include<sys/types.h>  
#include<sys/socket.h>  
#include<netinet/in.h>  
  
#define PORT    1234  
#define BACKLOG 1  
#define MAXDATASIZE 100   
int main()  
{  
		int listenfd,connectfd;  
		struct sockaddr_in server;  
		struct sockaddr_in client;  
		int sin_size;  
char buf[MAXDATASIZE];  
		if((listenfd=(socket(AF_INET,SOCK_STREAM,0)))==-1)  
		{  
				//handle exception  
				perror("Creating socket failed");  
				exit(1);  
		}  
  
		bzero(&server,sizeof(server));  
		server.sin_family=AF_INET;  
		server.sin_port=htons(PORT);  
		server.sin_addr.s_addr=htonl(INADDR_ANY);  
  
		/*Bind socket to address*/  
		if(bind(listenfd,(struct sockaddr *)&server,sizeof(struct sockaddr))==-1)  
		{  
				perror("Bind error");  
				exit(1);  
		}  
		 if(connect(listenfd,(struct sockaddr *)&server,sizeof(struct sockaddr))==-1)  
		{  
				printf("connect() error\n");  
				exit(1);  
		}  else{
			printf("connect success.");
		}
		send(listenfd,"Welcome to my server.\n",22,0); 
		int numbytes = 0;
if((numbytes=recv(listenfd,buf,MAXDATASIZE,0))==-1)  
		{  
				printf("recv() error");  
				exit(1);  
		}  
		buf[numbytes]='\0';  
		printf("Server Message: %s\n",buf);  
} 

编译执行后

  root[@iZ](/user/iZ):/home/c# gcc ser.c 
  root[@iZ](/user/iZ):/home/c# ./a.out 
  connect success.Server Message: Welcome to my server.
  
  root[@iZ](/user/iZ):/home/c#
回到顶部