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