我对Socket协议非常陌生,我确信问题来自于我对此几乎一无所知。但基本上我的服务器端口5000上有一个套接字,我需要一个angularjs代码来监听这个套接字。服务器上的套接字可以读取我从另一台计算机(客户端)发送的任何内容。但由于某种原因,角度代码无法监听/连接到套接字。这就是我现在所拥有的:
的index.html
<html ng-app="MyAwesomeApp">
<head>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/ng-websocket/ng-websocket.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="cnt">
</body>
</html>
这里是angularjs代码:
app.js
var app = angular.module('MyAwesomeApp', ['ngWebsocket']);
app.controller('cnt', function ($websocket) {
var ws = $websocket.$new('ws://localhost:5000');
ws.$on('$open', function () {
ws.$emit('hello', 'world'); // it sends the event 'hello' with data 'world'
})
.$on('test', function (message) { // it listents for 'incoming event'
console.log('something incoming from the server: ' + message);
});
});
这里是我用于服务器套接字的python代码:
#server example
import socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 5000))
serversocket.listen(1) # become a server socket, maximum 5 connections
# print "hello"
while True:
connection, address = serversocket.accept()
print address
while True:
buf = connection.recv(16)
if len(buf) > 0:
connection.sendall(buf)
print buf
# break
大多数angularjs代码来自https://coderwall.com/p/uhqeqg/html5-websocket-with-angularjs
这些是我在Chrome中遇到的错误
ng-websocket.js:122 WebSocket连接到&#39; ws:// localhost:5000 /&#39; 失败:WebSocket握手期间出错:net :: ERR_CONNECTION_RESET
并在Firefox中:
Firefox无法与服务器建立连接 WS://本地主机:5000 /
答案 0 :(得分:0)
你想做的事是不可能的。至少不是你想要的方式。
WebSockets是一种应用层协议,与HTTP协议非常相似。请注意ws
的{{1}}部分。
另一方面,您使用的是普通的BSD插座。这只是双方之间沟通的原始套接字。它需要“了解”另一方(AngularJS)正在“说话”的内容,即需要使用相同的协议进行通信。在BSD套接字的情况下,它本身就没有。
这就是你得到的原因:
ng-websocket.js:122 WebSocket连接到'ws:// localhost:5000 /' 失败:WebSocket握手期间出错:net :: ERR_CONNECTION_RESET
为了能够做到这一点,你需要一些基于WebSockets协议的异步编程框架。一个建议是Autobahn。