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

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

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

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

Socket.IO

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

Q&A

解決済

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

kumakake
kumakake

総合スコア42

Node.js

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

Socket.IO

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

1回答

0グッド

0クリップ

161閲覧

投稿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' がサーバー側で表示されません。

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/10/17 13:24依頼された後にこの質問は修正されています

こちらの質問が他のユーザーから「問題・課題が含まれていない質問」という指摘を受けました。

kumakake

2022/10/17 22:29

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

回答1

0

自己解決

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

投稿2022/10/18 02:08

kumakake

総合スコア42

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Node.js

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

Socket.IO

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