SocketException: соединение было прервано программным обеспечением вашего главного компьютера - PullRequest
0 голосов
/ 09 мая 2019

Я написал типичную программу TCP / IP (клиент ac # на unity3d и сервер python на raspberry). Клиент отправляет команды в raspberry через кнопки, а сервер отвечает на них захватывающими реле.Когда я запускаю сервер и подключаю к нему клиент в первый раз, все идет хорошо, но если я закрываю соединение на клиенте, а затем снова подключаю его к серверу и нажимаю любую кнопку, команда отправляется, кроме соединениязакрыт на сервере, и я не могу отправить другую команду, только если я перезапущу сервер.И это показывает сообщение об ошибке на единице: «SocketException: соединение было прервано программным обеспечением вашего хост-компьютера» Кто-нибудь может помочь мне решить эту проблему?это мой код единства:

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

public class Control : MonoBehaviour
{

public string IP = "192.168.8.100";
public int Port = 6704;
public byte[] dane;
public Socket client;
public InputField inputfield;
public int etat;
public string data;
public byte[] data1;
public Text display;




public void Forward_Click()
{

    data = "1";
    data1 = System.Text.Encoding.ASCII.GetBytes(data);
    client.Send(data1);


}
public void Back_Click()
{


    data = "2";
    data1 = System.Text.Encoding.ASCII.GetBytes(data);
    client.Send(data1);


}
public void Right_Click()
{

    data = "3";
    data1 = System.Text.Encoding.ASCII.GetBytes(data);
    client.Send(data1);


}
public void Left_Click()
{


    data = "4";
    data1 = System.Text.Encoding.ASCII.GetBytes(data);
    client.Send(data1);

}
public void R_Turn_Click()
{

    data = "5";
    data1 = System.Text.Encoding.ASCII.GetBytes(data);
    client.Send(data1);



}
public void L_Turn_Click()
{


    data = "6";
    data1 = System.Text.Encoding.ASCII.GetBytes(data);
    client.Send(data1);

}

public void FR_Click()
{


    data = "7";
    data1 = System.Text.Encoding.ASCII.GetBytes(data);
    client.Send(data1);


}

public void FL_Click()
{
    data = "8";
    data1 = System.Text.Encoding.ASCII.GetBytes(data);
    client.Send(data1); }

public void OnRelease()
{ data = "0";
    data1 = System.Text.Encoding.ASCII.GetBytes(data);
    client.Send(data1);
    Debug.Log("button not pressed");
}

 public void Connecting()
{
client =
new Socket(AddressFamily. InterNetwork, 
System.Net.Sockets.SocketType.Stream, ProtocolType.Tcp);
    client.Connect(IP, Port);
    display.text = "got connection";
    Changing();


}


public void Changing()
{ byte[] b = new byte[1024];
    int k = client.Receive(b);//recive data from port coming from python script 
    string szReceived = System.Text.Encoding.ASCII.GetString(b, 0, k);
    if (client.Connected)
    {
        Debug.Log("Getting data from Python ");
        Debug.Log(szReceived);//showing data on the unity log
    }
    else
    {
        Debug.Log(" Not Connected");

    }
}


void Start()
{
        }

void Update()
{

     }
}
public void Disconnect()
{
    client.Close();
    display.text = "Disconnect";
}

}

...