前提・実現したいこと
現在、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
ここにより詳細な情報を記載してください。

回答1件
あなたの回答
tips
プレビュー