未在IOS上调用Javascript Websocket OnOpen
我一直在使用websockets开发服务器(Java)和客户端(JavaScript),Android中的一切都正常,但当我在iPhone上测试时,JavaScript页面挂起在任何websocket.send方法上 在Android上,gameButton功能运行,在页面上输出“Send!”,服务器接收消息。在IOS上,gameButton函数输出类似“Input:u”的内容,但显然挂起connection.send,不输出“Sent!”,服务器也不接收消息。iPhone上从未调用过onopen功能,但Android上使用过。有什么想法吗?如果您需要查看一些服务器代码,请告诉我 对不起,代码太长了 客户端的Javascript:未在IOS上调用Javascript Websocket OnOpen,javascript,ios,websocket,server,send,Javascript,Ios,Websocket,Server,Send,我一直在使用websockets开发服务器(Java)和客户端(JavaScript),Android中的一切都正常,但当我在iPhone上测试时,JavaScript页面挂起在任何websocket.send方法上 在Android上,gameButton功能运行,在页面上输出“Send!”,服务器接收消息。在IOS上,gameButton函数输出类似“Input:u”的内容,但显然挂起connection.send,不输出“Sent!”,服务器也不接收消息。iPhone上从未调用过onope
<!DOCTYPE html>
<html>
<head>
<title>Echo Test</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
</head>
<body onload="pageLoad()" style="background:black; color:cyan">
<div id="joinform">
<input type="text" id="username" value="Username..."></input>
<button id="joinbutton" onclick="joinSubmit()">Join!</button></div>
<div id="gamecontrols">
<button onclick="gameButton('u')" id="upbutton"> UP </button>
<button onclick="gameButton('d')" id="downbutton">DOWN</button></div>
<div id="leftDiv" style="float:left; width=10%; height=300px"><canvas id="leftCanvas" style="border:2px solid cyan"></canvas> </div>
<div id="rightDiv" style="float:left; width=10%; height=300px"><canvas id="rightCanvas" style="border:2px solid cyan"></canvas> </div>
<div id="statusdiv"> </div>
<div id="messages"></div>
</body>
<script type="text/javascript">
var connection = new WebSocket('ws://174.51.xxx.xx:9091');
var messages = document.getElementById("messages");
var username = document.getElementById("username");
var joinbutton = document.getElementById("joinbutton");
var game = document.getElementById("gamecontrols");
var joinform = document.getElementById("joinform");
var state = 0;
var leftCanvas = document.getElementById('leftCanvas')
var rightCanvas = document.getElementById('rightCanvas');
var statusdiv = document.getElementById('statusdiv')
var startx = 0
var starty = 0;
var distx = 0;
var disty = 0;
// When the connection is open, send some data to the server
connection.onopen = function(e) {
writeResponse('Open!');
connection.send('TEST');
}
// Log errors
connection.onerror = function(error) {
writeResponse('Error: ' + error);
}
connection.onclose = function(e) {
writeResponse("Disconnected: " + e.data);
}
// Log messages from the server
connection.onmessage = function(e) {
writeResponse('Server: ' + e.data);
}
function pageLoad() {
game.style.visibility = "hidden";
}
function writeResponse(text) {
messages.innerHTML += "<br/>" + text;
}
function joinSubmit() {
game.style.visibility = "visible";
//connection.send(username.value);
writeResponse("Username sent to server.");
joinform.remove();
leftCanvas.addEventListener('touchstart', function(e) {
var touchobj = e.changedTouches[0] // reference first touch point (ie: first finger)
startx = parseInt(touchobj.clientX) // get x position of touch point relative to left edge of browser
starty = parseInt(touchobj.clientY)
statusdiv.innerHTML = 'Status: touchstart<br> ClientX: ' + startx + 'px'
drawJoystick(startx, starty);
e.preventDefault()
}, false)
leftCanvas.addEventListener('touchmove', function(e) {
e.preventDefault()
var touchobj = e.changedTouches[0] // reference first touch point for this event
var distx = parseInt(touchobj.clientX) - startx
var disty = parseInt(touchobj.clientY) - starty
statusdiv.innerHTML = 'Status: touchmove<br> Horizontal distance traveled: ' + distx + 'px<br> Vertical distance traveled: ' + disty + 'px' +
'<br>Dist: ' + Math.sqrt((startx - (distx + startx)) * (startx - (distx + startx)) + (starty - (disty + starty)) * (starty - (disty +
starty)));
//connection.send("L=" + distx + "=" + disty);
connection.send("A=" + Math.floor(angleBetween2Lines(startx, starty, startx + distx, starty + disty) + 90) * -1);
connection.send("B=" + distx + "=" + disty);
}, false)
leftCanvas.addEventListener('touchend', function(e) {
var touchobj = e.changedTouches[0] // reference first touch point for this event
statusdiv.innerHTML = 'Status: touchend<br> Resting x coordinate: ' + touchobj.clientX + 'px'
e.preventDefault()
}, false)
}
function gameButton(ctrl) {
writeResponse("Control: " + ctrl);
connection.send(ctrl);
writeResponse("Sent!");
}
function find_angle(x1, y1, x2, y2) {
var AB = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
var BC = Math.sqrt(Math.pow(x2 - (x1 - 10), 2) + Math.pow(y2 - y1, 2));
var AC = Math.sqrt(Math.pow((x1 - 10) - x1, 2) + Math.pow(y1 - y1, 2));
return Math.acos((BC * BC + AB * AB - AC * AC) / (2 * BC * AB)) * (180 / Math.PI);
}
function angleBetween2Lines(x1, y1, x2, y2) {
var angle1 = Math.atan2(y1 - y1,
x1 - (x1 + 100));
var angle2 = Math.atan2(y1 - y2,
x1 - x2);
return angle1 - angle2 * (180 / Math.PI);
}
</script>
</html>
iPhone:
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: 174.51.xxx.xx:9091
Origin: http://server.site88.net
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: Sq0xOYhkomBmiyMbGwp/kQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D15 Safari/601.1
我想出来了。当我创建要从服务器发送回浏览器的头时,我使用“httpResponse.concat(“\r\n\r\n”)”在头的末尾添加换行符,这根本不起作用。将其更改为“httpResponse=httpResponse+”\r\n\r\n“;”确实有效
GET / HTTP/1.1
Host: 174.51.xxx.xx:9091
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://server.site88.net
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Linux; Android 5.0; SM-G900V Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.91 Mobile Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Sec-WebSocket-Key: IKTSyKHA8zclXsm2hFzm5Q==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: 174.51.xxx.xx:9091
Origin: http://server.site88.net
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: Sq0xOYhkomBmiyMbGwp/kQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D15 Safari/601.1