所以我特別想要做的是獲得一個串行代理將管道arduino到Unity3d在Linux上運行。 System.IO.Ports不能在具有統一性的linux上工作。無法弄清楚如何讓Socket接收數據C#
所以我得到了一個基於python的串口代理腳本,我已經啓動並運行得很好。我可以netcat進入本地主機,實際上從arduino獲得輸出。
nc localhost 8082
g'day from bitty 1.0 -- type 'logout' to disconnect
Connecting to /dev/tty.usbmodem5d11... connected.
HELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLO
我只有arduino打印出HELLO重複。
但是,串行代理已啓動並正在運行,並且有數據通過它。
現在我正在嘗試在Unity中編寫代碼來接收這些數據,但我無法使其工作。
這是我的代碼:
public Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
public byte[] buffer = new byte[256];
int pinRead = 0;
void Start()
{
socket.Connect(IPAddress.Parse("127.0.0.1"),8082);
}
void Update()
{
if (socket.IsBound)
{
try
{
int bytesRead;
bytesRead = socket.Receive(buffer);
string incommingdata = System.Text.Encoding.ASCII.GetString(buffer);
Debug.Log(bytesRead+" || "+incommingdata);
}
catch (System.Exception e)
{
}
}
bytesRead始終爲0和incomingData只是沒有任何關係。它連接,isBound返回true。我無法讓代碼正確地接收數據並將其放入可用的格式中。
請幫忙。我需要得到這個工作,遠遠超出我的專業領域。我如何完成這項工作?
在Unity中,更新功能是主遊戲循環,它以60 fps的速度調用。 此外,服務器沒有斷開連接,因爲我有它在那裏終端運行,它說我的C#代碼連接。 – rygo6
我想你的原始代碼的問題是它試圖從不同的線程同時進行多次阻塞的接收調用。 Unity是異步調用更新還是單線程? (對不起,我不得不在這裏發表評論,而不是在你的回答中)。 –