Сокеты и 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();
}
}
}