Сокеты и BinaryWriter = Не удается записать данные в транспортное соединение - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, пишу клиент-серверное приложение и столкнулся с ошибкой, гуглил и по этому поводу ничего не могу найти, что бы решило проблему. Есть сторона сервера :
class Program
{
    static List<string> user = new List<string> { "admin 1", "user qwerty", "host yyyyysha" };
 
    static private Socket socket, accept_socket;
    static private bool login_flag;
 
    static private BinaryReader binaryread;
 
    static void Main(string[] args)
    {
        login_flag = false;
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
        socket.Bind(new IPEndPoint(IPAddress.Any, 10));
        socket.Listen(10);
        while (true)
        {
            try
            {
                accept_socket = socket.Accept();
                binaryread = new BinaryReader(new NetworkStream(accept_socket));
                switch (binaryread.ReadInt32())
                {
                    case 1:
                        if (Login_Server(binaryread.ReadString(), binaryread.ReadString()))
                            accept_socket.Send(Encoding.UTF8.GetBytes("Ви успішно залогінились!"));
                        else
                            accept_socket.Send(Encoding.UTF8.GetBytes("Не вірний логін/пароль!"));
                        break;
                }
 
                accept_socket.Shutdown(SocketShutdown.Both);
                accept_socket.Close();
            }
            catch (SocketException e)
            {
                Console.WriteLine(e.Message);
            }
            Console.ReadKey();
        }
    }
 
    static private bool Login_Server(string login, string password)
    {
        foreach (string key in user)
        {
            string[] arr_key = key.Split(' ');
            if (arr_key[0].Trim(' ') == login.Trim(' ') && arr_key[1].Trim(' ') == password.Trim(' '))
            {
                Console.WriteLine("User : { [Login = " + login + "] [Pass = " + password + "] } = Login!");
                login_flag = true;
                break;
            }
        }
        return login_flag;
    }
}
И сторона клиента
public partial class MainWindow : Window
{
 
    private Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
    private BinaryWriter binarywriter;
 
    public MainWindow()
    {
        InitializeComponent();
    }
 
    private void Client_Form_Loaded(object sender, RoutedEventArgs e)
    {
        try
        {
            this.socket.Connect(new IPEndPoint(IPAddress.Loopback, 10));
            this.binarywriter = new BinaryWriter(new NetworkStream(this.socket));
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
 
    private void log_Click(object sender, RoutedEventArgs e)
    {
        string data = "";
        try
        {
            if (this.socket.Connected)
            {
                this.binarywriter.Write(1);
                this.binarywriter.Write(login.Text);
                this.binarywriter.Write(password.Password);
 
                byte[] buffer = new byte[1024];
                int size;
                do
                {
                    size = socket.Receive(buffer);
                    data += Encoding.UTF8.GetString(buffer);
                } while (size > 0);
                MessageBox.Show(data);
            }
            else
            {
                MessageBox.Show("Connection error");
            }
 
        }
        catch (IOException ex)
        {
            MessageBox.Show(ex.Message);
        }
        catch (SocketException es)
        {
            MessageBox.Show(es.Message);
        }
    }
 
}
Первый раз когда отправляю данные с клиента, все хорошо :
this.binarywriter.Write(1);
this.binarywriter.Write(login.Text);
this.binarywriter.Write(password.Password);
А когда второй раз, то выдает ошибку на
this.binarywriter.Write(login.Text);
что "Не удается записать данные в транспортное соединение". Как решить эту проблему ? Спасибо за внимание и помощь!
Не дописал полностью, выдает ексепшен что "Не удается записать данные в транспортное соединение: Программа на вашем хост-компьютере разорвала установленное подключение."

Решение задачи: «Сокеты и BinaryWriter = Не удается записать данные в транспортное соединение»

textual
Листинг программы
public partial class MainWindow : Window
{
 
    private Socket socket;
    private BinaryWriter binarywriter;
    
    public MainWindow()
    {
        InitializeComponent();
    }
 
    private void log_Click(object sender, RoutedEventArgs e)
    {
        this.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
        
        string data = "";
        try
        {
            this.socket.Connect(new IPEndPoint(IPAddress.Loopback, 10));
            this.binarywriter = new BinaryWriter(new NetworkStream(this.socket));
            if (this.socket.Connected)
            {
                this.binarywriter.Write(1);
                this.binarywriter.Write(login.Text);
                this.binarywriter.Write(password.Password);
                int size = 0;
                byte[] buffer = new byte[1024];
                
                size = socket.Receive(buffer);
                data = Encoding.UTF8.GetString(buffer);  
                MessageBox.Show(data);
            }
            else
            {
                MessageBox.Show("Connection error");
            }
 
        }
        catch (IOException ex)
        {
            MessageBox.Show(ex.Message);
        }
        catch (SocketException es)
        {
            MessageBox.Show(es.Message);
        }
        finally
        {
            socket.Shutdown(SocketShutdown.Both);
            socket.Close();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы