Написал клиент-серверный чат, который передает сообщения по локальной сети, на wpf
Вот код сервера:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
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);
}
}
}
Вот код клиента:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
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
Дополнительные сведения: Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)"
Как исправить эту ошибку? Чтобы программа-сервер могла обмениваться сообщениями с несколькими программами-клиентами по локальной сети?