質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Q&A

解決済

1回答

698閲覧

socket.ioでクライアントからサーバーへ通信ができない

kumakake

総合スコア42

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

0グッド

0クリップ

投稿2022/10/17 13:09

編集2022/10/17 14:02

socket.ioを利用してサーバー、クライアントの双方向の通信がしたいです。
サーバーからクライアントへの通信はできているのですが、クライアントからサーバーへの通信(socket.emit)ができません。
対応策をご享受ください。

現在下記のように作成をしています。

・server.js

var app = require('http').createServer(handler) var io = require('socket.io')(app); var fs = require('fs'); // HTTP サーバのポートを指定する app.listen(80); function handler (req, res) { fs.readFile(__dirname + '/index.html', function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); }); } io.on('connection', function (socket) { // クライアントへデータ送信 // emit を使うとイベント名を指定できる socket.emit('news', { hello: 'world' }); socket.on('report', function (data) { // クライアントから受け取ったデータを出力する console.log('report-->' + data); }); });

client.js

// Client API を読み込む const io = require('socket.io-client'); // 通信先のサーバを指定する const socket = io('http://localhost'); socket.on('news', function (data) { // サーバから受け取ったデータを出力する console.log(data); // サーバへデータ送信 // emit を使うとイベント名を指定できる socket.emit('report', { my: 'data' }); // 通信を切断し、プロセスを終了する socket.disconnect(); process.exit(0); });

package.json

% cat package.json { "name": "socket.io-sample", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": {}, "dependencies": { "socket.io": "^4.5.3", "socket.io-client": "^4.5.3" } }

・環境
Mac OS
nodeバージョン:v14.18.3

・実行方法
$ node server.js
$ node client.js

これで、サーバー→クライアントの hello: 'world' はクライアント側で表示されます。
クライアント→サーバーの my: 'data' がサーバー側で表示されません。

対応策をご享受ください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumakake

2022/10/17 22:29

課題としては、クライアントからサーバーへ通信ができない 意図としては、解決方法へのアドバイスがほしい です。 現在作成しているソースや環境も記載しています。 後学のため、具体的にはどのようなポイントを記載をすればいいのでしょうか? よろしくお願いします。
guest

回答1

0

自己解決

クライアント側で、emitのあとに切断、終了していることが原因でした。
サーバー側からの返答を待って終了させれば、サーバー側のログに出力されるようになりました。

投稿2022/10/18 02:08

kumakake

総合スコア42

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問