Сокеты и 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();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д