【发布时间】:2018-03-07 07:46:45
【问题描述】:
我正在尝试在 HTML 文件(从我的笔记本电脑打开)与在同一台笔记本电脑上运行的套接字服务器之间创建套接字连接。 要启动服务器,我使用以下代码:
var net = require('net');
var server = net.createServer();
server.on('connection', handleConnection);
server.listen(9000, function() {
console.log('server listening to %j', server.address());
});
function handleConnection(conn) {
var remoteAddress = conn.remoteAddress + ':' + conn.remotePort;
console.log('new client connection from %s', remoteAddress);
conn.on('data', onConnData);
conn.once('close', onConnClose);
conn.on('error', onConnError);
function onConnData(d) {
var chunks = [];
chunks.push(d);
console.log('Client at %s says %s', remoteAddress, Buffer.concat(chunks).toString());
conn.write(d);
}
function onConnClose() {
console.log('connection from %s closed', remoteAddress);
}
function onConnError(err) {
console.log('Connection %s error: %s', remoteAddress, err.message);
}
}
当我尝试使用简单的 Java 应用程序连接到服务器时,它运行良好,这里是 Java 应用程序的代码:
public class simpleClient {
public static void main(String[] args){
simpleClient sC = new simpleClient();
sC.connect();
}
@SuppressWarnings("resource")
public void connect (){
DataOutputStream out = null;
DataInputStream in = null;
Socket s = null;
SocketAddress sockaddr = new InetSocketAddress("127.0.0.1", 9000);
s = new Socket();
try {
s.connect(sockaddr, 10 * 1000);
s.setSoTimeout(30000);
out = new DataOutputStream (s.getOutputStream());
in = new DataInputStream (s.getInputStream());
String str = "Aloha my friend.";
out.write(str.getBytes());
out.flush();
}
catch (IOException e) {e.printStackTrace();}
}
}
连接成功后的服务器日志:
server listening to {"address":"::","family":"IPv6","port":9000}
new client connection from ::ffff:127.0.0.1:54669
Client at ::ffff:127.0.0.1:54669 says Aloha my friend.
Connection ::ffff:127.0.0.1:54669 error: read ECONNRESET
connection from ::ffff:127.0.0.1:54669 closed
但是,当我尝试使用 HTML 文件中的脚本连接到服务器时,没有任何反应。我无法建立连接。
我最接近连接的是使用以下 HTML 脚本:
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<script src="https://cdn.socket.io/socket.io-1.0.0.js"></script>
<script>
function sendData() {
try {
var socket = io.connect('http://localhost:9000');
socket.on('connect', function(data) {
socket.emit('Hello.');
socket.on('message', function (msg) {
socket.emit('some message ...');
});
});
}
catch(err) {
alert('ERROR: socket.io encountered a problem:\n\n' + err);
}
}
sendData();
</script>
</body>
</html>
服务器端的日志如下所示:
server listening to {"address":"::","family":"IPv6","port":9000}
new client connection from ::1:65397
Client at ::1:65397 says GET /socket.io/?EIO=2&transport=polling&t=1520412442267-4 HTTP/1.1
Host: localhost:9000
Connection: keep-alive
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: he-IL,he;q=0.9,en-US;q=0.8,en;q=0.7
connection from ::1:65397 closed
我真的迷路了,因为我是 JavaScript / HTML 领域的新手,我真的不知道要寻找什么以及如何解决它。
问题是:什么是 HTML 端最好/最简单的套接字客户端实现,它允许我向/从服务器发送和接收数据?
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
您实际上并没有调用创建套接字连接的函数。由于 HTML 代码中的第一个脚本标记,浏览器会尝试从您的服务器加载 socket.io 库。尝试从 CDN 加载 socket.io,并实际调用 sendData 函数
-
@PatrickHund 谢谢。你能提供一个实际的例子来说明如何做到这一点吗?
-
我已经按照你说的编辑了 HTML 文件,看看变化。但结果是一样的。
标签: javascript html node.js sockets