Не отправляются сообщения через сокеты

218
10 января 2018, 15:13

Запускаю сервер, потом клиент, отправляю сообщение с клиента, все отображается, набираю второе, жму Enter, сообщение не отправляется, а консоль клиента исчезает. В чем проблема?

Сервер:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Net;
namespace Server
{
    class Program
    {
        static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        static void Main(string[] args)
        {
            socket.Bind(new IPEndPoint(IPAddress.Any, 904)); // привязка к адрессу
            socket.Listen(2); // кол-во подключений
            Socket client = socket.Accept();
            Console.WriteLine("Новое подключение");
            byte[] buffer = new byte[1024];
            client.Receive(buffer); // получаем данные
            Console.WriteLine(Encoding.ASCII.GetString(buffer)); // раскодировка
            Console.ReadLine();
        }
    }
}

Клиент:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
namespace Client
{
    class Program
    {
        static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        static void Main(string[] args)
        {
            socket.Connect("127.0.0.1", 904);
            while (true)
            {
                string message = Console.ReadLine();
                byte[] buffer = Encoding.ASCII.GetBytes(message);
                socket.Send(buffer);
            }
        }
    }
}
Answer 1

Вот вам пример socket сервера:

    public class StateObject
    {
        public Socket workSocket = null;
        public const int BufferSize = 1024;
        public byte[] buffer = new byte[BufferSize];
        public StringBuilder sb = new StringBuilder();
    }
    public class AsynchronousSocketListener
    { 
        public static ManualResetEvent allDone = new ManualResetEvent(false);
        public AsynchronousSocketListener()
        {
        }
        public static void StartListening()
        {
            byte[] bytes = new byte[1024];
            IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 904);
            Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                listener.Bind(localEndPoint);
                listener.Listen(2);
                while (true)
                {
                    allDone.Reset();
                    Console.WriteLine("Ожидание соединения...");
                    listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
                    allDone.WaitOne();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
        public static void AcceptCallback(IAsyncResult ar)
        {
            allDone.Set();
            Socket listener = (Socket)ar.AsyncState;
            Socket handler = listener.EndAccept(ar);
            StateObject state = new StateObject
            {
                workSocket = handler
            };
            handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
        }
        public static void ReadCallback(IAsyncResult ar)
        {
            String content = String.Empty; 
            StateObject state = (StateObject)ar.AsyncState;
            Socket handler = state.workSocket;
            int bytesRead = handler.EndReceive(ar);
            if (bytesRead > 0)
            {
                state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
                Console.WriteLine($"Сообщение: {state.sb.ToString()}");
            } 
            handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
        }
        static void Main(String[] args)
        {
            StartListening();
            return;
        }
    }
READ ALSO
Как установить focus в safari mobile?

Как установить focus в safari mobile?

Добрый день! Ситуация такая: есть скрипт (jquery), который ищет форму (поле) и делает ейfocus()

235
Преобразование `null` в `0` (javascript)

Преобразование `null` в `0` (javascript)

Допустим у нас есть вот такой код на javascript

355
Элементы массива JS

Элементы массива JS

Как вывести диапазон идущих по порядку элементов массива?

303
Создание конструктора

Создание конструктора

Помогите пожалуйстаНужно создать что-то подобное этому https://print

252