#c# #tcp #unity3d #client
#c# #tcp #unity3d #клиент
Вопрос:
Итак, я пытаюсь отправлять / получать сообщения между моим проектом Unity и другим окном, которое действует как сервер. Я не могу использовать stream.Read() с имеющимся у меня сейчас массивом байтов. В нем говорится, что это исключение NullReferenceException, и оно не создается, хотя я думаю, что это так. Это может быть что-то очень простое, но это действительно беспокоит меня, лол. Вот код; строка, которая выдает исключение, — это stream.Read(….):
using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Net;
using System.Diagnostics;
using System.Net.NetworkInformation;
using System.IO;
public class Client_Script : MonoBehaviour {
byte[] SendBuffer = null;
TcpClient client = null;
NetworkStream stream = null;
int PortNumber = 3003;
string IP = "192.168.1.100";
// Use this for initialization
void Start () {
try
{
SendBuffer = new byte[1024];
client = new TcpClient();
client.Connect(IP, PortNumber);
}
catch (Exception e)
{
//"Couldn't connect to destination"
}
stream = client.GetStream();
}
// Update is called once per frame
void Update () {
stream.Read (SendBuffer, 0, 1024);
string message = BitConverter.ToString (SendBuffer);
ASCIIEncoding encoder = new ASCIIEncoding ();
SendBuffer = encoder.GetBytes (message);
stream.Write (SendBuffer, 0, SendBuffer.Length);
}
}
===============================================================
На самом деле кода не так много; Я просто разочарован тем, как он говорит, что он не создается, хотя он есть. В нем может не быть действительных данных, но я все равно его создал. Это работает в проектах Visual Studio, но не тогда, когда я использую его внутри Unity3D.
Комментарии:
1. Вы уверены, что перед обновлением вызывается Start?
2. В Unity ‘Start’ всегда вызывается перед ‘Update’ при создании экземпляра объекта MonoBehaviour
Ответ №1:
- Вам нужно вдвойне убедиться, что Update() не вызывается перед вызовом Start() — видел это десятки раз в коде, где люди сначала подключают обработчики событий, а затем инициализируют.
- В текущем состоянии, если внутри Start() есть исключение, вы, судя по всему, его вообще не обрабатываете, поэтому «клиент» может возвращать нулевое значение, и это то, что на самом деле является причиной исключения.