Visual Studio で利用可能な SocketIO4Net ライブラリを使用して、Windows Web フォーム アプリケーションで Web ソケット接続のクライアント側をコーディングしようとしています。これが私のコードです:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SocketIOClient;
namespace WFA
{
public partial class Form1 : Form
{
Client socket = new Client("ws://ec2-52-39-154-191.us-west-2.compute.amazonaws.com:8080");
private void Form1_Load(object sender, EventArgs e)
{
socket.Connect();
}
}
}
エンドポイントを持つ Amazon Web Services (AWS) にインスタンスがあります
ec2-52-39-154-191.us-west-2.compute.amazonaws.com
そして、サーバー上に常に実行されるapp.jsファイルがあります
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connection', function(socket){
console.log("user connected");
});
http.listen(8080, function(){
console.log('listening on *:8080');
});
これにより、フォームがロードされるたびに「listening on *:8080」および「user connected」メッセージが表示されるだけです。*:8080 でリッスンしていることを表示しますが、フォームがロードされたときに接続されているユーザーを表示しません。どこが間違っているのかわかりません。AWSの設定により、パブリックエンドポイントであり、同じネットワーク上にないため、機能していない可能性があると思いました。
だから私はこれをWebブラウザのクライアント側で試しました:
<!doctype html>
<html>
<head>
</head>
<body>
<div id = "chat">
<ul id="messages"></ul>
</div>
<form action="">
<input id="m" autocomplete="off" /><button>Send</button>
</form>
<script src="/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
var socket = io.connect('ws://ec2-52-39-154-191.us-west-2.compute.amazonaws.com:8080');
</script>
</body>
</html>
このクライアント コードを使用すると、誰かがリンクにアクセスするたびに、http://ec2-52-39-154-191.us-west-2.compute.amazonaws.com:8080/
接続されたユーザーが表示されます。
誰かがリンクにアクセスしたときに表示されるのと比較して、フォームが読み込まれたときに表示されないのはなぜですか。誰かがフォームをロードしたときにメッセージが表示されるようにします。