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

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

ただいまの
回答率

90.52%

  • Java

    13766questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Unity

    3978questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • TCP

    163questions

    TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Unity(C#)とJavaでのネットワーク通信ができません

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 150

Kushiro

score 0

 前提・実現したいこと

現在、Unityを用いてゲームを製作しており、クライアント側プログラムをC#(Unity)で、サーバ側をJavaで作成しています。
複数のクライアントが一つのサーバに接続し、ソケットを用いてデータをやり取りするシステムを想定しています。

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

クライアント側でnew TcpClient(HOST, PORT)を行っているにもかかわらず、通信が受け付けられず、2台間のPCで通信が開始されません。サーバ側ではエラーが出ず、クライアントの接続を待機し続けているため、そもそもクライアント側がサーバに接続できていないのだと思われます。
しかし、1台のパソコン内で、(localhostではなく)IPアドレスを指定してクライアントとサーバを両方実行すると、問題なく接続が開始されます。
どのようにすれば、複数台間での通信もできるようになるでしょうか?

エラーメッセージ
SocketException:接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。

 該当のソースコード

――――――――――サーバプログラム(Java)――――――――――

//クライアントの接続
public void acceptClient() {
    try {
        ServerSocket ss = new ServerSocket(port);
        while(true) {
            Socket socket = ss.accept();

             //スレッド作成

receiver[userCount] = new Receiver(socket, userCount);
            System.out.println("クライアント接続 : 成功"); //サーバ確認
            receiver[userCount].start();//クライアント用のスレッド動作開始
            pw[userCount] = new PrintWriter(socket.getOutputStream(), true);
            online[userCount] = true;
            menu[userCount] = 0;
            userCount++;

        }
        //ss.close();

    }catch(IOException e) {
        e.printStackTrace();
    }
}    

public static void main(String[] args) {
    Server server = new Server(10000);        
    System.out.println("サーバ起動"); //サーバ確認
    server.acceptClient(); //クライアントの接続
}

――――――――――クライアントプログラム(Unity,C#)――――――――――

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;

public class LoginManager : MonoBehaviour {

    public static string HOST = "localhost";//IPアドレスの宣言
    public static int PORT = 10000;//ポート番号の宣言


    public static TcpClient tc;
    NetworkStream ns;
    StreamReader sr;
    StreamWriter sw;

    public string flag="false3"; 
    public GameObject buttonMessage;
    public GameObject buttonMessageText;

    string playername;
    private string password;
    public InputField nameinputField;
    public InputField passinputField;

    // Use this for initialization
    void Start () {

        tc = new TcpClient(HOST, PORT);//サーバへ接続
        Debug.Log("通信を要求\ns");
        //tc.Connect(ipAdd, PORT);
        ns = tc.GetStream();
        sr = new StreamReader(ns);
        sw = new StreamWriter(ns);

        buttonMessage.SetActive(false);

    }

 試したこと

・TCPClient.Connectメソッドを用いた接続
・ファイアウォールの設定の変更(UnityとEclipseの許可)
いずれも、変化がありませんでした。

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

Unity2018.1.4f1(64bit)
Eclipse Oxygen.1a

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sysjojo

    2018/07/16 05:11

    以前Java同士で接続できていたときもポートは10000番でしたか?ファイアウォールは一時的に無効化したりもしてみましたか?クライアントPC/サーバーPC共にFWの設定を変えましたか?

    キャンセル

  • Kushiro

    2018/07/17 09:37

    Java同士の通信の際も、ポート番号10000番で行いました。

    キャンセル

  • Kushiro

    2018/07/17 09:39

    先程、ファイアーウォールの設定を変更し、UnityとEclipseを許可、設定自体を無効等を行って実行したところ、「接続した後応答がない」旨のエラーが出てしまいました...

    キャンセル

回答 1

check解決した方法

0

先程、ネットワーク環境を変えてみたところ、接続が行われました。パブリックネットワークを用いていたため、そのネットワークのセキュリティ設定に引っかかってしまっていたのでは...と考えられます。
そのため、これからは違うネットワーク環境を用いて実行するようにしたいと思います。
相談に乗っていただいた方々には、感謝を申し上げます。ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    複数の子オブジェのrenderの表示切替を行いたい

    すみません、質問させてください。 親オブジェにあるClassから、子オブジェの表示切替を行いたいです。 子オブジェのrenderを親オブジェで取得し、親の座標を条件にして、子オ

  • 解決済

    パーティクルを一瞬だけ表示させたい。

    前提・実現したいこと キー入力とUpdateとLateUpdateを利用して、パーティクルを一瞬だけ表示したいと考えています。 仕様: Fキーを押した瞬間だけ、指定した再

  • 解決済

    C言語とC#間でSocket通信をさせたい

    前提・実現したいこと C言語とC#でローカルな(同一PC内での)ソケット通信を行いたいです。 C言語側ではWinSocketを利用してサーバーを立て C#側ではSystem.

  • 解決済

    Unity スクリーンショットのタイミングと連写機能

    Unityでスクリーンショット機能を持ったシステムを作っています。 それぞれの機能はこのように実装したいと思っています。 ボタンA:押すと5秒後に自動でスクリーンショットを

  • 解決済

    unity 当たったらシーンロードする方法

    オブジェクトオブジェクトに当たったらシーンロードする方法が知りたいです。

  • 解決済

    Unity-Update上の判定で一度だけメソッドを呼び出す

    Unityでゲームを制作しています。 例えば、ゲーム上でスコアが一定値に達するたびにステージの難易度が上がり、画面に「ステージ〇〇」というテキストのカットインを入れたりするよう

  • 解決済

    作成したインスタンスの個別認識について

    実現したいこと 作成したインプットフィールドに値を入力する際、個別に認識し それをセーブし次回アプリを起動した際に個別に読み込む。 問題点 Instantiateでイン

  • 解決済

    unity のtoggle の使い方について

    前提・実現したいこと unityでオンオフスイッチを実現するためにtoggleを使おうと考えています。 toggleにチェックか入っているか否かをif文の判別に使用したいです。

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

  • Java

    13766questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Unity

    3978questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • TCP

    163questions

    TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。