Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чат по локальной сети: при запуске второй копии кл 
:(
    Опции темы
Iostrеam
  Дата 29.1.2012, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.1.2012

Репутация: нет
Всего: нет



Написал клиент-серверный чат, который передает сообщения по локальной сети, на 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

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

Как исправить эту ошибку? Чтобы программа-сервер могла обмениваться сообщениями с несколькими программами-клиентами по локальной сети?
PM MAIL   Вверх
Partizan
Дата 13.2.2012, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Код

            TcpListener listener = new TcpListener(IPAddress.Parse("10.5.24.11"), 2001);

            try
            {                                             
               listener.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);               
            }
            catch (SocketException)
            {
               //Failed to share port
            }     

            listener.Start();



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.