Unity 5.4를 통해 내 서버와 통신하는 andorid 앱을 만들려고합니다. 장치는 동일한 네트워크에 있어야 이렇게 할 수 있습니다.안드로이드 용 unity3d의 TcpClients 사용이 가능합니까?
그 때문에 System.Net.Sockets 및 TcpClient를 사용하여 내 서버에 연결합니다. 모든 것이 잘 편집기에서 실행하거나 독립 실행 형 Windows를 실행하면 독립 실행 형 PC를 실행하는 PC와 다른 컴퓨터 사이의 통신이 가능합니다. 내가 .apk로 빌드하고 스마트 폰에 설치하자마자 SocketException이 발생합니다. 또한 휴대 전화가 꽤 오랫동안로드되지 않습니다.
TcpClient를 사용하고 있으며, unity3d가있는 android에서 가능합니까?
내가 얻는 예외는 다음과 같습니다
System.Net.Sockets.SocketException: Connection timed out
내가 두 장치가 동일한 네트워크, 예를 들어,에 있는지 확인했다 서버를 호스팅하는 PC의 IP는 192.168.178.24이고 스마트 폰의 IP는 192.168.178.113입니다.
필요한 포트는 열려 있고 방화벽은 데이터를 통과시킵니다.
나는 유니티에서이 코드를 runnig 오전 : 플레이어의 환경 설정에서 받았습니다 IP 주소가 맞다면 내가 확인을 두 번
private TcpClient client;
private StreamWriter writer;
void Start()
{
try
{
client = new TcpClient(AddressFamily.InterNetwork);
IPAddress ipAddress = IPAddress.Parse(PlayerPrefs.GetString(MenuManager.IpPlayerPrefKey));
Debug.Log(ipAddress.ToString());
client.Connect(ipAddress, 11000);
writer = new StreamWriter(client.GetStream());
Debug.Log("connected");
}
catch (ArgumentNullException ane)
{
Debug.Log(string.Format("ArgumentNullException : {0}", ane.ToString()));
}
catch (SocketException se)
{
Debug.Log(string.Format("SocketException : {0}", se.ToString()));
}
catch (Exception e)
{
Debug.Log(string.Format("Unexpected exception : {0}", e.ToString()));
}
}
, 그것은이다.
누군가가 연결을 설정하지 못하게하는 원인이 있습니까? 내 PC에서 Wireshark를 시도했는데 들어오는 패키지가 표시되지 않았으므로 연결을 설정하는 중 실수가 될 수 있습니다. 서버 코드
public class ServiceListener
{
public TcpListener Listener;
public void StartListening()
{
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = Array.Find<IPAddress>(ipHostInfo.AddressList, ipMatch => ipMatch.AddressFamily == AddressFamily.InterNetwork);
Listener = new TcpListener(ipAddress, 11000);
Listener.Start();
}
public void StopListening()
{
Listener.Stop();
}
}
static void Main()
{
ServiceListener currentListener = new ServiceListener();
currentListener.StartListening();
TcpClient currentClient = currentListener.Listener.AcceptTcpClient();
StreamReader reader = new StreamReader(currentClient.GetStream());
Console.WriteLine("Connected");
while (true)
{
byte[] messageBytes = new byte[1024];
if (!reader.EndOfStream)
{
string message = reader.ReadLine();
string[] messageParts = message.Split('|');
int xOffset = int.Parse(messageParts[0]);
int yOffset = int.Parse(messageParts[1]);
bool leftClick = bool.Parse(messageParts[2]);
bool rightClick = bool.Parse(messageParts[3]);
Console.WriteLine(string.Format("x:{0},y:{1},left:{2},right:{3}", xOffset, yOffset, leftClick, rightClick));
}
else
{
currentClient = currentListener.Listener.AcceptTcpClient();
reader = new StreamReader(currentClient.GetStream());
}
}
}
방금 기억했습니다. 아직 해결 되었습니까? – Programmer
그것은 지금 wokring하고있다. 그러나 나는 정확하게 이유를 모른다. 그리고 나는 같은 문제를 가진 사람들을위한 해결책을 제시하고자합니다. 길에있을 때 여유 시간을 가졌으므로 노트북 컴퓨터로 시도해 보았습니다. 새 프로젝트에서 내 서버 코드를 복사하고 붙여 넣었습니다. 어떻게 든 내 서버는 안드로이드를 받아들이지 못했지만, 복사 한 후 새 프로젝트에 붙여 넣는 것과 동일한 코드를 100 % 사용했습니다. – Kusakari13
나는 그것을 시험해 보았습니다. 방화벽 문제 일 가능성이 큽니다. 다른 스레드로 구현하거나 비동기 메서드를 사용할 수 있습니다. 해피 코딩! – Programmer