Не удается подключиться к сокету более X раз - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь написать программу на Unity3D, которая может получать и визуализировать данные из приложения Python:

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

public class Visualizer : MonoBehaviour {


    TcpListener listener;

    private Socket client = null;

    private int i = 0;
    const int byteCount = 1000;

    private const int recvPort = 11000;


    static private bool receiverConnected;    
    static private bool receiverReady;


    //TODO: set max message size somehow intelligently
    private byte[] bytes = new byte[byteCount];

    void Start() {



        receiverConnected = false;
        receiverReady = false;

        IPAddress localAddr = IPAddress.Parse("127.0.0.1"); //always locally
        listener = new TcpListener(localAddr, recvPort);        
        listener.Start();       






    }

    // Update is called once per frame
    void Update()
    {

        if (listener.Pending())
        {            
            client = listener.AcceptSocket();
            receiverConnected = true;

        }



        if (receiverConnected)
        {


            try
            {
                int bytesRec;
                byte[] allBytes = new byte[byteCount];

                bytesRec = client.Receive(allBytes);





                    if (bytesRec == 0)
                    {
                        client.Close();
                        client.Disconnect(false);



                    receiverReady = false;
                    receiverConnected = false;
                }
                else { 

                    bytes = allBytes.Take(bytesRec).ToArray();
                    receiverReady = true;
                }


            catch (Exception e)
            {

                Debug.Log("Exception in receiving and rendering data");
            }
        }


        //now process:

        if (receiverConnected && receiverReady)
        {
         //DO STUFF

        }
    }


}

На стороне Python моя программа запускается со следующим:

TCP_IP = '127.0.0.1'
TCP_PORT = 11000
BUFFER_SIZE = 1000           
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))

Хотя вначале все работает нормально, после того, как я закрываю свое приложение python и перезагружаю его несколько раз, s.connect((TCP_IP, TCP_PORT)) начинает зависать, и программа никогда не продолжается. Я предполагаю, что что-то не так в моей C # обработке этих соединений. Как я могу немного изменить его, чтобы более аккуратно обрабатывать закрытие и повторное открытие запросов на соединение на стороне Python?

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