Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Чат по локальной сети. Выводит исключение. В чем ошибка?  [new]
Levenguk
Member

Откуда:
Сообщений: 9
Написал клиент-серверный чат, который передает сообщения по локальной сети, на 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 одной программой-клиентом все нормально, но когда запускаю вторую копию клиента выводит исключение в строке
listener.Start();


С сообщением:
"Необработанное исключение типа "System.Net.Sockets.SocketException" произошло в System.dll

Дополнительные сведения: Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)"

Как исправить эту ошибку? Чтобы программа-сервер могла обмениваться сообщениями с несколькими программами-клиентами по локальной сети?
29 янв 12, 18:14    [11992213]     Ответить | Цитировать Сообщить модератору
 Re: Чат по локальной сети. Выводит исключение. В чем ошибка?  [new]
уТКа
Member

Откуда: Страна дураков и разбитых дорог
Сообщений: 1266
Levenguk,

автор
Как исправить эту ошибку?

Читать литературу про программированию сокетов.
29 янв 12, 21:08    [11992865]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить