Hi,
I am trying to set ups the basics for TCP/IP communication. I am going to receive messages from a server, and will use the messages to change my Unity3D scene.
I created a TCPListenerBehaviour (which I will be using):
public class TCPListenerBehaviour : MonoBehaviour
{
private TcpClient socketConnection;
private Thread clientReceiveThread;
public string url = "localhost";
public int port = 8052;
void Start()
{
ConnectToTcpServer();
}
private void ConnectToTcpServer()
{
try
{
clientReceiveThread = new Thread(new ThreadStart(ListenForData));
clientReceiveThread.IsBackground = true;
clientReceiveThread.Start();
}
catch (Exception e)
{
//
}
}
private void ListenForData()
{
try
{
socketConnection = new TcpClient(url, port);
Byte[] bytes = new Byte[1024];
while (true)
{
using (NetworkStream stream = socketConnection.GetStream())
{
int length;
while ((length = stream.Read(bytes, 0, bytes.Length)) != 0)
{
var incomingData = new byte[length];
Array.Copy(bytes, 0, incomingData, 0, length);
string serverMessage = Encoding.ASCII.GetString(incomingData);
Debug.Log("server message received as: " + serverMessage);
}
}
}
}
catch (SocketException socketException)
{
//
}
}
and I created a TCPSenderBehaviour (which I wanted to use for testing):
public class TCPSenderBehaviour : MonoBehaviour
{
private TcpClient socketConnection;
public string url = "localhost";
public int port = 8052;
void Start()
{
ConnectToTcpServer();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
SendMessage("Test");
}
}
private void ConnectToTcpServer()
{
try
{
socketConnection = new TcpClient(url, port);
}
catch (Exception e)
{
//
}
}
public void Send(string message)
{
if(socketConnection == null)
{
return;
}
try
{
NetworkStream stream = socketConnection.GetStream();
if (stream.CanWrite)
{
byte[] clientMessageAsByteArray = Encoding.ASCII.GetBytes(message);
stream.Write(clientMessageAsByteArray, 0, clientMessageAsByteArray.Length);
}
}
catch (SocketException socketException)
{
//
}
}
}
Now, TCPSenderBehaviour does send every time I tap space.
But TCPListenerBehaviour never receives anything?
Where’s the problem?