Написал клиент-серверный чат, который передает сообщения по локальной сети, на wpf Вот код сервера:
| Код | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO;
namespace server { /// <summary> /// Логика взаимодействия для MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }
private void button1_Click(object sender, RoutedEventArgs e) { Thread Access = new Thread(new ThreadStart(getaccess)); Access.IsBackground = true; Access.Start(); }
private void getaccess() { TcpListener listener = new TcpListener(IPAddress.Parse("10.5.24.11"), 2002); listener.Start(); while (true) { TcpClient client = listener.AcceptTcpClient(); StreamReader sr = new StreamReader(client.GetStream()); Execute(sr.ReadLine()); client.Close(); } }
private void send(string message) { TcpClient client = new TcpClient(); try { client.Connect(IPAddress.Parse("10.5.24.11"), 2001); StreamWriter sw = new StreamWriter(client.GetStream()); sw.AutoFlush = true; sw.WriteLine(message); } catch { MessageBox.Show("Ошибка при подключении к Client.exe server"); } client.Close(); }
private void Execute(string data) { Dispatcher.Invoke((Action)(() => this.textBox1.Text = data)); send(data); }
private void button2_Click(object sender, RoutedEventArgs e) { send(textBox1.Text); } } }
|
Вот код клиента:
| Код | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO;
namespace client1 { /// <summary> /// Логика взаимодействия для MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }
private void button1_Click(object sender, RoutedEventArgs e) { Thread Access = new Thread(new ThreadStart(getaccess)); Access.IsBackground = true; Access.Start(); }
private void getaccess() { TcpListener listener = new TcpListener(IPAddress.Parse("10.5.24.11"), 2001); listener.Start(); while (true) { TcpClient client = listener.AcceptTcpClient(); StreamReader sr = new StreamReader(client.GetStream()); Execute(sr.ReadLine()); client.Close(); } }
private void send(string message) { TcpClient client = new TcpClient(); try { client.Connect(IPAddress.Parse("10.5.24.11"), 2002); StreamWriter sw = new StreamWriter(client.GetStream()); sw.AutoFlush = true; sw.WriteLine(message); } catch { MessageBox.Show("Ошибка при подключении к Client.exe"); } client.Close(); }
private void Execute(string data) { Dispatcher.Invoke((Action)(() => this.textBox2.Text = data)); }
private void button2_Click(object sender, RoutedEventArgs e) { send(textBox1.Text); } } }
|
C одной программой-клиентом все нормально, но когда запускаю вторую копию клиента выводит исключение в строке
С сообщением: "Необработанное исключение типа "System.Net.Sockets.SocketException" произошло в System.dll
Дополнительные сведения: Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)"
Как исправить эту ошибку? Чтобы программа-сервер могла обмениваться сообщениями с несколькими программами-клиентами по локальной сети? |