I
iosif88
Итак, стоит следующая задача есть сервер который должен принимать строки от клиента, обрабатывать их и возвращать ему. Вопрос как правильно организовать это взаимодействие чтоб это было надежно. Скажем есть такой код:
Сервер:
Клиент
Проблема в данном случае что при потпытке послать пустую строку всё "замораживается".
Это лишь пример, а в общем хотелось бы понять как нужно правильно организовать это взаимодействие, чтоб всё работало надежно, не зависимо от того что происходит на стороне клиента. Какой должен быть общий алгоритм сервера? Где и какие исключения нужно обратывать? Нужно ли при слишком долгом ожидании клиента отключать его от сервера и как это сделать (чтоб сервер заново мог принимать сообщения)?
Думаю тема была бы полезна не только мне. Если у вас есть ссылка на подобно рода материалы поделитесь.
Сервер:
Код:
listener = new TcpListener(9050);
listener.Start();
Socket socket = null;
while (true)
{
try
{
listener.Start();
socket = listener.AcceptSocket();
string answer = "";
int brec = socket.Receive(buffer);
string msg = Encoding.ASCII.GetString(buffer, 0, brec);
if (msg != "")
{
answer = OFSReq(msg); //здесь строка обрабатывается
}
else
{
answer = "Wrong String";
}
byte[] answ = Encoding.ASCII.GetBytes(answer);
socket.Send(answ);
}
catch (Exception Exp)
{
/*byte[] answ = Encoding.ASCII.GetBytes(Exp.Message);
socket.Send(answ);*/
WriteExpLog(Exp.Message);
}
finally
{
socket.Close();
}
Клиент
Код:
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
try {
server.Connect(IPAddress.Parse("127.0.0.1"), 9050);
byte[] buffer = new Byte[1024];
string message = textBox1.Text;
buffer = Encoding.ASCII.GetBytes(message);
byte[] answer = new Byte[1024];
server.Send(buffer);
int received = server.Receive(answer);
if (received < 0 )
{
richTextBox1.AppendText("Read failed \n");
server.Close();
return;
}
richTextBox1.AppendText(Encoding.ASCII.GetString(answer, 0, answer.Length) + "\n");
}
catch (Exception exp)
{
richTextBox1.AppendText(exp.Message + "\n");
}
finally
{
server.Close();
}
Проблема в данном случае что при потпытке послать пустую строку всё "замораживается".
Это лишь пример, а в общем хотелось бы понять как нужно правильно организовать это взаимодействие, чтоб всё работало надежно, не зависимо от того что происходит на стороне клиента. Какой должен быть общий алгоритм сервера? Где и какие исключения нужно обратывать? Нужно ли при слишком долгом ожидании клиента отключать его от сервера и как это сделать (чтоб сервер заново мог принимать сообщения)?
Думаю тема была бы полезна не только мне. Если у вас есть ссылка на подобно рода материалы поделитесь.