emscriptenを使用してコンパイルされたWebアプリケーションから生のTCPサーバーに接続する際に問題があります。アプリのdeskoptバージョンから接続すると、すべてうまくいきます。
私の VPS では、次の方法で websockify をダウンロード、コンパイル、実行します。
./websockify 0.0.0.0:1235 127.0.0.1:1234
次に、サーバーのコードをコンパイルして実行します: http://pastebin.com/KiehDrvk (BeeJ ネットワークから)
私のクライアントコードは非常に単純です(テスト目的のみ)、コードのビット:
TCPsocket sock;
struct sockaddr_in sock_addr;
/* Allocate a TCP socket structure */
sock = (TCPsocket)malloc(sizeof(*sock));
if ( sock == NULL ) {
SDLNet_SetError("Out of memory");
goto error_return;
}
/* Open the socket */
sock->channel = socket(AF_INET, SOCK_STREAM, 0);
if ( sock->channel == INVALID_SOCKET ) {
SDLNet_SetError("Couldn't create socket");
goto error_return;
}
/* Connect to remote, or bind locally, as appropriate */
if ( (ip->host != INADDR_NONE) && (ip->host != INADDR_ANY) ) {
// ######### Connecting to remote
memset(&sock_addr, 0, sizeof(sock_addr));
sock_addr.sin_family = AF_INET;
sock_addr.sin_addr.s_addr = ip->host;
sock_addr.sin_port = ip->port;
/* Connect to the remote host */
if ( connect(sock->channel, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) == SOCKET_ERROR && errno != EINPROGRESS ) {
SDLNet_SetError("Couldn't connect to remote host");
goto error_return;
}
while (1);
}
したがって、これをデスクトップで実行すると、クライアントはサーバーに接続し、期待どおりに待機します。
サーバー端末リターン:
selectserver: new connection from 91.211.105.49 on socket 5
Websockify ターミナル リターン:
None because is from desktop
しかし、Webバージョンから接続しようとすると、クライアントが接続して突然切断します:
サーバー端末リターン:
selectserver: new connection from 127.0.0.1 on socket 6
selectserver: socket 6 hung up
hung up: Success
Websockify ターミナル リターン:
1: got client connection from 91.211.105.49
1: forking handler process
1: using plain (not SSL) socket
1: using protocol HyBi/IETF 6455 13
1: connecting to: 127.0.0.1:1234
1: client closed connection
1: handler exit
誰かが何か考えがありますか?