Я пытаюсь создать клиент ac # tcp, чтобы он мог получать сообщение с сервера c и отправлять его на него.Но у меня есть проблема.я могу прочитать первое сообщение, отправленное моим сервером, но если я отправлю сообщение на мой сервер, оно захочет отправить мне нокаут, но я никогда не получу нокаут.Но это работает с netcat ... Мой код ниже:
using System;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
/*
** @brief Permit to create and keep the server connection
**
** @param Void
** @return Void
*/
public class TCPClients : MonoBehaviour {
private TcpClient socketConnection;
private Thread clientReceiveThread;
private bool stop = true;
// private MapModification map;
/*
** @brief Permit to start code
**
** @param Void
** @return Void
*/
void Start ()
{
ConnectToTcpServer();
}
/*
** @brief to call function at each frame
**
** @param Void
** @return Void
*/
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space))
{
SendMessages("CLIENT_GFX");
}
}
/*
** @brief Permit to create and keep the server connection
**
** @param Void
** @return Void
*/
private void ConnectToTcpServer ()
{
try
{
clientReceiveThread = new Thread (new ThreadStart(ListenForData));
clientReceiveThread.IsBackground = true;
clientReceiveThread.Start();
}
catch (Exception e)
{
Debug.Log("On client connect exception " + e);
}
}
/*
** @brief Permit to connect and listen server
**
** @param Void
** @return Void
*/
private void ListenForData()
{
try {
socketConnection = new TcpClient("192.168.1.47", 4244);
}
catch (SocketException socketException) {
Debug.Log("Socket exception: " + socketException);
}
using (NetworkStream stream = socketConnection.GetStream())
{
while (stop) {
Byte[] bytes = new Byte[1024];
int length;
if (stream.DataAvailable)
{
while ((length = stream.Read(bytes, 0, bytes.Length)) != 0) //block here
{
Debug.Log("Length = " + length);
var incommingData = new byte[length];
Array.Copy(bytes, 0, incommingData, 0, length);
string serverMessage = Encoding.ASCII.GetString(incommingData);
Debug.Log("Message from server :" + serverMessage);
}
Debug.Log("After while");
}
Thread.Sleep(1);
}
}
}
/*
** @brief Permit to send a massage to the server
**
** @param string message -> contain the message
** that will be send to the server
** @return Void
*/
private void SendMessages(string message)
{
if (socketConnection == null)
{
return;
}
try
{
NetworkStream stream = socketConnection.GetStream();
if (stream.CanWrite)
{
string clientMessage = message;
byte[] clientMessageAsByteArray = Encoding.ASCII.GetBytes(clientMessage);
stream.Write(clientMessageAsByteArray, 0, clientMessageAsByteArray.Length);
Debug.Log("Message send = " + clientMessage);
}
}
catch (SocketException socketException)
{
Debug.Log("Socket exception: " + socketException);
}
}
/*
** @brief Permit to close socket and stop loop at application quit
**
** @param Void
** @return Void
*/
private void OnApplicationQuit()
{
stop = false;
socketConnection.GetStream().Close();
socketConnection.Close();
}
}
Как вы видите, я думаю, что я блокирую во время чтения, потому что это плохо.Если кто-нибудь может мне помочь.Thx.