Ошибка в соединениях с сервером - PullRequest
0 голосов
/ 13 ноября 2011

Я сейчас пытаюсь работать с сервером.У меня есть этот код: enter image description here

Я запускаю метод 'HandleCC' в потоке с 'ParametrizedThreadStart'.Я пытаюсь подключиться к «127.0.0.1».Я могу подключиться.Когда я подключен, первая точка останова хороша, вторая тоже, но потом код останавливается.(Консоль все еще работает, но никто из следующих точек останова не нарушает код.) Пожалуйста, помогите мне, извините за мой английский.

Полный код:

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Collections;
using System.Threading;
namespace MTSP
{
class Comunication
{
    private TcpListener listener;
    private Thread thread;
    public Comunication()
    {
        this.listener = new TcpListener(IPAddress.Any, 20345);
        this.thread = new Thread(new ThreadStart(this.ListenLoop));
        this.thread.Start();
    }
    private void ListenLoop()
    {
        this.listener.Start();
        while (true)
        {
            TcpClient client = this.listener.AcceptTcpClient();
            Thread tr = new Thread(new ParameterizedThreadStart(this.HandleCC));
            tr.Start(client);
        }
    }
    private void HandleCC(object client)
    {
        TcpClient cli = (TcpClient)client;
        NetworkStream stream = cli.GetStream();
        byte[] buffer = new byte[1024];
        int bytesread = 0;
        string mess = "";
        StringBuilder compmess = new StringBuilder();
        while (true)
        {
            bytesread = 0;
            try
            {
                bytesread = stream.Read(buffer, 0, buffer.Length);
            }
            catch
            {
                break;
            }

            compmess.AppendFormat("{0}", Encoding.ASCII.GetString(buffer, 0, bytesread));
            string a = compmess.ToString();
            string g;
        }
        System.Diagnostics.Debug.WriteLine(compmess.ToString());
        cli.Close();
    }
}
}

1 Ответ

0 голосов
/ 13 ноября 2011

В любом клиент-серверном приложении вам нужны и клиент, и сервер.Вы написали сервер.Вот пример клиента (он был протестирован и работает с вашим кодом в качестве сервера):

    TcpClient client = new TcpClient("localhost", 20345);
    NetworkStream stream = client.GetStream();

    while (true)
    {
        string message = Console.ReadLine();
        Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);  
        // Send the message to the connected TcpServer. 
        stream.Write(data, 0, data.Length);
    }

    stream.Close();
    client.Close();

Поместите этого клиента в отдельное консольное приложение, затем:

  • запустите сервер
  • , затем запустите клиент в новом экземпляре Visual Studio или запустите exe
  • , введите что-нибудь в окне консоли клиента
  • , затем он пройдет через ваш шагобновления StringBuilder, который вы используете.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...