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

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

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

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

TCP

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

Unity

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

Q&A

解決済

1回答

836閲覧

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

Kushiro

総合スコア5

Java

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

TCP

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

Unity

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

0グッド

2クリップ

投稿2018/07/15 09:32

編集2018/07/17 00:36

前提・実現したいこと

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

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

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

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

該当のソースコード

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

ANA

1//クライアントの接続 2public void acceptClient() { 3 try { 4 ServerSocket ss = new ServerSocket(port); 5 while(true) { 6 Socket socket = ss.accept(); 7 8             //スレッド作成 9 10receiver[userCount] = new Receiver(socket, userCount); 11 System.out.println("クライアント接続 : 成功"); //サーバ確認 12 receiver[userCount].start();//クライアント用のスレッド動作開始 13 pw[userCount] = new PrintWriter(socket.getOutputStream(), true); 14 online[userCount] = true; 15 menu[userCount] = 0; 16 userCount++; 17 18 } 19 //ss.close(); 20 21 }catch(IOException e) { 22 e.printStackTrace(); 23 } 24} 25 26public static void main(String[] args) { 27 Server server = new Server(10000); 28    System.out.println("サーバ起動"); //サーバ確認 29 server.acceptClient(); //クライアントの接続 30} 31

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

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System; 5using System.IO; 6using System.Net; 7using System.Net.Sockets; 8 9public class LoginManager : MonoBehaviour { 10 11 public static string HOST = "localhost";//IPアドレスの宣言 12 public static int PORT = 10000;//ポート番号の宣言 13 14 15 public static TcpClient tc; 16 NetworkStream ns; 17 StreamReader sr; 18 StreamWriter sw; 19 20 public string flag="false3"; 21 public GameObject buttonMessage; 22 public GameObject buttonMessageText; 23 24 string playername; 25 private string password; 26 public InputField nameinputField; 27 public InputField passinputField; 28 29 // Use this for initialization 30 void Start () { 31 32 tc = new TcpClient(HOST, PORT);//サーバへ接続 33 Debug.Log("通信を要求\ns"); 34 //tc.Connect(ipAdd, PORT); 35 ns = tc.GetStream(); 36 sr = new StreamReader(ns); 37 sw = new StreamWriter(ns); 38 39 buttonMessage.SetActive(false); 40 41 }

試したこと

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

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

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

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

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

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

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

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

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

fiveHundred

2018/07/15 09:43

このプログラムではなく、他のソフトやコマンドなどでは接続できますでしょうか?
Kushiro

2018/07/15 09:57

以前、JavaクライアントとJavaサーバでの通信を行った際は、問題なく接続ができました。別のUnityクライアントを用いた接続はまだ試しておりません。
euledge

2018/07/15 11:58

firewallの設定は確認済ですか?
sysjojo

2018/07/15 20:11

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

2018/07/17 00:37

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

2018/07/17 00:39

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

回答1

0

自己解決

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

投稿2018/07/17 02:17

Kushiro

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問