🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

解決済

1回答

1307閲覧

Unity ソケット通信の送信ができません

nianag0

総合スコア6

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

0クリップ

投稿2019/10/15 05:30

前提・実現したいこと

unityを使ったソケット通信での送信がしたい

発生している問題・エラーメッセージ

サーバーからの文字の受信はできるんですが、送信ができていないみたいで、サーバーから応答が何も帰ってきません。 エラーは出ていません。 変換形式はutf8です。 inputFieldから入力する形で、打った文字がログには表示されてますので、その文字を変換して送信すればいいだけだと思っていたのですが、うまくいきません。

該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Net.Sockets; using System; using UnityEngine.UI; public class UDP : MonoBehaviour { TcpClient objSck = new TcpClient(); NetworkStream objStm; static string localIpString = "IPアドレス"; static int localPort = ポート番号; // Use this for initialization void Start() { objSck.Connect(localIpString, localPort); objStm = objSck.GetStream(); Debug.Log("接続しました"); inputField = GetComponent<InputField>(); InitInputField(); } // Update is called once per frame void Update() { if(objSck.Available > 0) //受信 { Byte[] dat = new Byte[objSck.Available]; objStm.Read(dat, 0, dat.GetLength(0)); Debug.Log(System.Text.Encoding.UTF8.GetString(dat)); } } public void InputLogger() { string inputValue = inputField.text; Byte[] dat = System.Text.Encoding.UTF8.GetBytes(inputValue); //送信 objStm.Write(dat, 0, dat.GetLength(0)); Debug.Log(inputValue); InitInputField(); } void InitInputField() { inputField.text = ""; inputField.ActivateInputField(); } }

試したこと

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

coco_bauer

2019/10/15 06:43

質問にコードが書かれている UDPクラスを使う、どのようなプログラムを作ったのですか? そして、それを実行した結果、どうなったのでしょう? そして、「サーバーからの文字の受信はできるんですが、送信ができていないみたい」という判断の根拠になったのは、どのような挙動なのでしょうか?
nianag0

2019/10/15 08:10

ご返信ありがとうございます。 このクラスを使って、サーバーにソケット通信で接続し、メッセージの送受信が行えるだけのプログラムです。 キャンバスのInputFieldオブジェクトに上記のスクリプトをアタッチして、On End EditにInputLoggerをつけているだけの状態です。 成功例は、サーバーに特定のコマンドを送信すると、サーバーから応答があります(例:helpと送信するとコマンド一覧が送られてくる) ですが、何を打っても応答がない(メッセージが受信されない)ため、コードが間違っていると思っています。 サーバーに接続した直後にサーバーから最初に送られてくる接続検知のメッセージは表示されています。 もともと大学の授業で使用したpythonのソケット通信プログラム(サーバーも大学の先生が作ったもの)を、unityで動かせないかと試行錯誤している所存です
dodox86

2019/10/15 17:47

サーバーに特定のコマンドを送信して、サーバーからの応答が受信できたことで「送信できた」と判断した、と言うことでしょうか。「サーバーに特定のコマンドを送信して、サーバーは受信して応答したのだけれども、その応答を受信できない」ケースと、「サーバーに特定のコマンドを送信した(つもり)だが、サーバー側でそもそも受信できてない」場合は、意味と対応が異なります。
coco_bauer

2019/10/15 23:44

具体的なプログラムのコードを示せないのなら、質問を取り消してください。 内容がわからない質問で、時間を無駄にしたくありません。
nianag0

2019/10/16 04:02

>dodox86さん ご返信ありがとうございます。 サーバーに特定のコマンドを送信した(つもり)だが、サーバー側でそもそも受信できてない のほうです。 >coco_bauerさん 大変失礼いたしました... 今回自分が書いたプログラムのコードは上に張ってあるもの(該当のソースコード欄)だけです。 サーバーのほうのプログラムコードは分かりませんので、問題でしたら質問を削除させていただきます。
guest

回答1

0

自己解決

すみません自己解決しました。
Byte[] dat = System.Text.Encoding.UTF8.GetBytes(inputValue); //送信
この行に改行コードを加えないとサーバー側で反応してくれないだけでした。
Byte[] dat = System.Text.Encoding.UTF8.GetBytes(inputValue + "\n"); //送信
これで動きました。お騒がせしました。

投稿2019/10/16 05:27

nianag0

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問