Отправка данных несколько раз через один сокет - PullRequest
3 голосов
/ 23 февраля 2012

Код серверной стороны:

static void Main(string[] args)
        {
            static Socket sck;
            Console.WriteLine("Server Started...");
            sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sck.Bind(new IPEndPoint(0, 1234));
            while (true)
            {
                sck.Listen(100);
                Socket accepted = sck.Accept();
                buffer = new byte[accepted.SendBufferSize];
                int bytesRead = accepted.Receive(buffer);
                byte[] formatted = new byte[bytesRead];
                for (int i = 0; i < bytesRead; i++)
                    formatted[i] = buffer[i];
                string strdata = Encoding.ASCII.GetString(formatted);
                Console.WriteLine(strdata + "\r");
            //    sck.Close();
            }

Код на стороне клиента:

static void Main(string[] args)
        {
            static Socket sck;
            sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint localEndpt = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
            try
            {
                sck.Connect(localEndpt);
            }
            catch
            {
                Console.Write("Unable to Connect");
            }
            while (true)
            {
                Console.WriteLine("Enter Text");
                string sendtext = Console.ReadLine();
                byte[] Data = Encoding.ASCII.GetBytes(sendtext);
                sck.Send(Data);
                Console.WriteLine("Data Sent!");
                //sck.Close();
                //Console.Read();
            }

Я хочу отправлять текст со стороны клиента несколько раз, однако текст отправляется только в первый раз. Пожалуйста, скажите мне, где я иду не так.

1 Ответ

1 голос
/ 23 февраля 2012

Проблема на вашем сервере. Вы находитесь в цикле, прослушивая новое соединение, принимая его и получая данные. Тем не менее, то, что происходит, это утверждение прослушивания, которое видит клиент, который хочет подключиться. Ваш оператор принятия фактически соединяет клиента, а ваш оператор получения получает первые данные. После этого ваш сервер снова начинает прослушивать новое соединение, но не получает больше данных от уже существующего соединения. Чтобы устранить эту проблему, вы должны построить цикл вокруг оператора Accept и цикл вокруг оператора Receive на вашем сервере

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...