Не удалось ответить на соединение между сервером Unity3D и Raspberry Pi - PullRequest
0 голосов
/ 12 июня 2018

Итак, вчера я работал над Raspberry Pi, разговаривающим с Unity (Python 2.7 на Pi, Unity 2017), затем карта памяти вышла из строя, и мне пришлось создать новую.Новая установка - это Python 3.5 и тот же Unity, что и раньше.Код, который я написал, я думаю, примерно такой же, хотя с устранением неполадок он немного изменился (операторы печати изменились и т. Д. Для 3.5).В любом случае я получаю сообщение об ошибке со стороны Unity о том, что подключенная сторона не ответила должным образом через некоторое время.Я пропинговал IP-адрес и сокет с ПК, а также с других компьютеров, и он доступен, но только приложение Unity не будет взаимодействовать с Pi-сервером.Может кто-нибудь увидеть, где я запутался в своем коде?Брандмауэр отключен на ПК, и IP-адреса / адреса портов для Pi указаны правильно.

Python на Raspberry Pi

import socket
import sys

backlog = 1
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('192.168.3.232', 12345))
s.listen(1)

while True:
    print ('waiting for a connection')
    connection, client_address = s.accept()

try:
    print ('connection from', client_address)
    while True:
        data = connection.recv(16)
        print ('received "%s"' % data)
        if data:
            print ('sending data back to the client')
            connection.sendall(data)
        else:
            print ('no more data from', client_address)
            break

finally:
    print("closing socket")
    cient.close()
    s.close()

C # на Unity

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

public class ClientSocket : MonoBehaviour {

 bool socketReady = false;
 TcpClient mySocket;
 public NetworkStream theStream;
 StreamWriter theWriter;
 StreamReader theReader;
 public String Host = "192.168.3.232";
 public Int32 Port = 12345;     

 void Start() {
     setupSocket ();
 }


 public void setupSocket() {                            // Socket setup here
     try {                
         mySocket = new TcpClient(Host, Port);
         theStream = mySocket.GetStream();
         theWriter = new StreamWriter(theStream);
         theReader = new StreamReader(theStream);
         socketReady = true;
     }
     catch (Exception e) {
         Debug.Log("Socket error:" + e);                // catch any exceptions
     }
 }

Ошибка с консоли Unity: ошибка сокета: System.Net.Sockets.SocketException: попытка подключения не удалась, поскольку подключенная сторона не ответила должным образом через определенный период времени, или не удалось установить соединение, так какподключенный хост не смог ответить.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

@ Колин.Я скопировал и вставил ваш код Python в Python 2.7.9, работающий на моем Raspberry Pi, а также на ваш клиентский сокет в Unity, работающий на моем ПК, и он отлично работает.Просто поменял IP адрес и все заработало нормально.Я знаю, что это поздний ответ, но он может помочь кому-то еще.

0 голосов
/ 12 июня 2018

Возможно, брандмауэр на Raspberry Pi все еще включен.Проверьте свои iptables.Вы можете проверить это, если создадите небольшое приложение на python на своем Raspberry Pi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...