Сокеты

Тема в разделе ".NET", создана пользователем iosif88, 17 дек 2009.

  1. iosif88

    iosif88 Well-Known Member

    Регистрация:
    14 окт 2009
    Сообщения:
    97
    Симпатии:
    0
    Итак, стоит следующая задача есть сервер который должен принимать строки от клиента, обрабатывать их и возвращать ему. Вопрос как правильно организовать это взаимодействие чтоб это было надежно. Скажем есть такой код:

    Сервер:

    Код (Text):
                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();
    }
    Клиент

    Код (Text):
              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();
    }
    Проблема в данном случае что при потпытке послать пустую строку всё "замораживается".

    Это лишь пример, а в общем хотелось бы понять как нужно правильно организовать это взаимодействие, чтоб всё работало надежно, не зависимо от того что происходит на стороне клиента. Какой должен быть общий алгоритм сервера? Где и какие исключения нужно обратывать? Нужно ли при слишком долгом ожидании клиента отключать его от сервера и как это сделать (чтоб сервер заново мог принимать сообщения)?

    Думаю тема была бы полезна не только мне. Если у вас есть ссылка на подобно рода материалы поделитесь.
     
  2. Young Programmer

    Young Programmer Гость

    для взаимодействия клиент-сервер посоветовал бы использовать WCF. Простых примеров передачи строк в интернете хватает, не нужно заморачиваться с сокетами всякими.
     
Загрузка...
Похожие Темы - Сокеты
  1. areostar
    Ответов:
    1
    Просмотров:
    215
  2. 123456789igor
    Ответов:
    0
    Просмотров:
    918
  3. acorn
    Ответов:
    13
    Просмотров:
    4.839
  4. Баламут
    Ответов:
    2
    Просмотров:
    3.121
  5. Баламут
    Ответов:
    0
    Просмотров:
    2.520

Поделиться этой страницей