Добрый день. Переписываю свое серверное приложение и столкнулся с непонятным поведением.
Когда подключается второй клиент, то после пары сообщений сервер перестает принимать от него сообщения.
Первый же клиент подключенный может спокойно посылать сообщения на сервер.
В чем может быть причина?
Вот код класса сервера :
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Server
{
public class Server
{
private Socket listenSocket;
private Socket clientSocket;
private IPEndPoint ip;
public Server(int port)
{
listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ip = new IPEndPoint(IPAddress.Any, port);
}
public void StartServer(int backlog)
{
listenSocket.Bind(ip);
listenSocket.Listen(backlog);
}
public void ClientAccept()
{
clientSocket = listenSocket.Accept();
}
public void MessageDecode()
{
byte[] buffer = new byte[clientSocket.SendBufferSize];
int readByte;
do
{
// Вывод полученных данных от клиентов.
readByte = clientSocket.Receive(buffer);
byte[] rData = new byte[readByte];
Array.Copy(buffer, rData, readByte);
string data = Encoding.ASCII.GetString(rData);
Console.WriteLine($"[{DateTime.Now.ToString()}] [{((IPEndPoint)clientSocket.RemoteEndPoint).Address.ToString()}] написал: " + data);
} while (readByte > 0);
Console.WriteLine($"[{DateTime.Now.ToString()}] Клиент отключился");
Console.ReadKey();
}
}
}
Вот как я вызываю в методе Main :
using System;
using System.Threading;
// Сервер
namespace Server
{
class Program
{
static void Main(string[] args)
{
int port = 904;
int backlog = 0;
// Инциализация сервера.
Server srv = new Server(port);
try
{
srv.StartServer(backlog);
Console.WriteLine("Server started....");
}
catch { }
while (true)
{
srv.ClientAccept();
Thread clientThread = new Thread(() => srv.MessageDecode());
clientThread.Start();
}
}
}
}