Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未在IOS上调用Javascript Websocket OnOpen_Javascript_Ios_Websocket_Server_Send - Fatal编程技术网

未在IOS上调用Javascript Websocket OnOpen

未在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

我一直在使用websockets开发服务器(Java)和客户端(JavaScript),Android中的一切都正常,但当我在iPhone上测试时,JavaScript页面挂起在任何websocket.send方法上

在Android上,gameButton功能运行,在页面上输出“Send!”,服务器接收消息。在IOS上,gameButton函数输出类似“Input:u”的内容,但显然挂起connection.send,不输出“Sent!”,服务器也不接收消息。iPhone上从未调用过onopen功能,但Android上使用过。有什么想法吗?如果您需要查看一些服务器代码,请告诉我

对不起,代码太长了

客户端的Javascript:

<!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