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

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

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

Здравствуйте, пишу клиент-серверное приложение и столкнулся с ошибкой, гуглил и по этому поводу ничего не могу найти, что бы решило проблему. Есть сторона сервера :
Листинг программы
  1. class Program
  2. {
  3. static List<string> user = new List<string> { "admin 1", "user qwerty", "host yyyyysha" };
  4. static private Socket socket, accept_socket;
  5. static private bool login_flag;
  6. static private BinaryReader binaryread;
  7. static void Main(string[] args)
  8. {
  9. login_flag = false;
  10. socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
  11. socket.Bind(new IPEndPoint(IPAddress.Any, 10));
  12. socket.Listen(10);
  13. while (true)
  14. {
  15. try
  16. {
  17. accept_socket = socket.Accept();
  18. binaryread = new BinaryReader(new NetworkStream(accept_socket));
  19. switch (binaryread.ReadInt32())
  20. {
  21. case 1:
  22. if (Login_Server(binaryread.ReadString(), binaryread.ReadString()))
  23. accept_socket.Send(Encoding.UTF8.GetBytes("Ви успішно залогінились!"));
  24. else
  25. accept_socket.Send(Encoding.UTF8.GetBytes("Не вірний логін/пароль!"));
  26. break;
  27. }
  28. accept_socket.Shutdown(SocketShutdown.Both);
  29. accept_socket.Close();
  30. }
  31. catch (SocketException e)
  32. {
  33. Console.WriteLine(e.Message);
  34. }
  35. Console.ReadKey();
  36. }
  37. }
  38. static private bool Login_Server(string login, string password)
  39. {
  40. foreach (string key in user)
  41. {
  42. string[] arr_key = key.Split(' ');
  43. if (arr_key[0].Trim(' ') == login.Trim(' ') && arr_key[1].Trim(' ') == password.Trim(' '))
  44. {
  45. Console.WriteLine("User : { [Login = " + login + "] [Pass = " + password + "] } = Login!");
  46. login_flag = true;
  47. break;
  48. }
  49. }
  50. return login_flag;
  51. }
  52. }
И сторона клиента
Листинг программы
  1. public partial class MainWindow : Window
  2. {
  3. private Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
  4. private BinaryWriter binarywriter;
  5. public MainWindow()
  6. {
  7. InitializeComponent();
  8. }
  9. private void Client_Form_Loaded(object sender, RoutedEventArgs e)
  10. {
  11. try
  12. {
  13. this.socket.Connect(new IPEndPoint(IPAddress.Loopback, 10));
  14. this.binarywriter = new BinaryWriter(new NetworkStream(this.socket));
  15. }
  16. catch (Exception ex)
  17. {
  18. MessageBox.Show(ex.Message);
  19. }
  20. }
  21. private void log_Click(object sender, RoutedEventArgs e)
  22. {
  23. string data = "";
  24. try
  25. {
  26. if (this.socket.Connected)
  27. {
  28. this.binarywriter.Write(1);
  29. this.binarywriter.Write(login.Text);
  30. this.binarywriter.Write(password.Password);
  31. byte[] buffer = new byte[1024];
  32. int size;
  33. do
  34. {
  35. size = socket.Receive(buffer);
  36. data += Encoding.UTF8.GetString(buffer);
  37. } while (size > 0);
  38. MessageBox.Show(data);
  39. }
  40. else
  41. {
  42. MessageBox.Show("Connection error");
  43. }
  44. }
  45. catch (IOException ex)
  46. {
  47. MessageBox.Show(ex.Message);
  48. }
  49. catch (SocketException es)
  50. {
  51. MessageBox.Show(es.Message);
  52. }
  53. }
  54. }
Первый раз когда отправляю данные с клиента, все хорошо :
Листинг программы
  1. this.binarywriter.Write(1);
  2. this.binarywriter.Write(login.Text);
  3. this.binarywriter.Write(password.Password);
А когда второй раз, то выдает ошибку на
Листинг программы
  1. this.binarywriter.Write(login.Text);
что "Не удается записать данные в транспортное соединение". Как решить эту проблему ? Спасибо за внимание и помощь!
Не дописал полностью, выдает ексепшен что "Не удается записать данные в транспортное соединение: Программа на вашем хост-компьютере разорвала установленное подключение."

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

textual
Листинг программы
  1. public partial class MainWindow : Window
  2. {
  3.  
  4.     private Socket socket;
  5.     private BinaryWriter binarywriter;
  6.    
  7.     public MainWindow()
  8.     {
  9.         InitializeComponent();
  10.     }
  11.  
  12.     private void log_Click(object sender, RoutedEventArgs e)
  13.     {
  14.         this.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
  15.        
  16.         string data = "";
  17.         try
  18.         {
  19.             this.socket.Connect(new IPEndPoint(IPAddress.Loopback, 10));
  20.             this.binarywriter = new BinaryWriter(new NetworkStream(this.socket));
  21.             if (this.socket.Connected)
  22.             {
  23.                 this.binarywriter.Write(1);
  24.                 this.binarywriter.Write(login.Text);
  25.                 this.binarywriter.Write(password.Password);
  26.                 int size = 0;
  27.                 byte[] buffer = new byte[1024];
  28.                
  29.                 size = socket.Receive(buffer);
  30.                 data = Encoding.UTF8.GetString(buffer);  
  31.                 MessageBox.Show(data);
  32.             }
  33.             else
  34.             {
  35.                 MessageBox.Show("Connection error");
  36.             }
  37.  
  38.         }
  39.         catch (IOException ex)
  40.         {
  41.             MessageBox.Show(ex.Message);
  42.         }
  43.         catch (SocketException es)
  44.         {
  45.             MessageBox.Show(es.Message);
  46.         }
  47.         finally
  48.         {
  49.             socket.Shutdown(SocketShutdown.Both);
  50.             socket.Close();
  51.         }
  52.     }
  53. }

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


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

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

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы