Unity is only printing first message from server
I am writing a server in C# using sockets. It takes a client message, displays the message and number of bytes, and immediately returns the message back to the client. This is working fine in any Telnet client application. In my Unity client, I have it designed so it sends a message from an input field to the server, and prints the message back from the server. It works fine on the first message sent, but thereon after Unity displays an empty message. The server receives it fine, along with the same number of bytes, so I'm not quite sure what is going on, though it appears to be a problem on Unity's side. I do notice than when using the Unity client it sends 2 extra bytes on top of any message I send. Here is my Unity code, feel free to ask for the server code if necessary.
using System.Net.Sockets;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
using System;
public class NetworkManager : MonoBehaviour {
public GameObject inputClient;
public GameObject panelClient;
public GameObject panelMainMenu;
public Text textClient;
public Text textServer;
public Text textHost;
public Text textPort;
private int intPort;
private bool socketReady;
private TcpClient socket;
private NetworkStream stream;
private StreamWriter writer;
private StreamReader reader;
public void ConnectToServer(){
//if already connected, escape from this function
if (socketReady) {
return;
}
//default host/port
string host = "127.0.0.1";
int port = 23000;
int.TryParse (textPort.text, out intPort);
if (textHost.text != "") {
host = textHost.text;
}
if(intPort != 0){
port = intPort;
}
//create the socket
try{
socket = new TcpClient(host, port);
stream = socket.GetStream();
writer = new StreamWriter(stream);
reader = new StreamReader(stream);
socketReady = true;
panelMainMenu.SetActive(false);
panelClient.SetActive(true);
}catch(Exception e){
Debug.Log ("Socket error: " + e.Message);
}
}
private void Update(){
if(socketReady){
if (stream.DataAvailable) {
string data = reader.ReadLine ();
if (data != null) {
OnIncomingData (data);
}
}
}
}
private void Start(){
panelMainMenu.SetActive (true);
panelClient.SetActive (false);
}
private void OnIncomingData(string data){
textServer.text = "Server: " + data;
Debug.Log (data);
}
private void Send(string data){
if (!socketReady) {
return;
}
writer.WriteLine (data);
writer.Flush ();
}
public void OnSendButton(){
string message = textClient.text;
Send (message);
}
}