Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 1
Регистрация: 26.11.2011
Сообщений: 33

Не посылает сообщения на все клиенты

01.03.2013, 18:58. Показов 766. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Попытался написать чат на C#.
C#
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
80
81
82
83
84
85
86
87
88
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Text;
 
namespace server
{
    class Program
    {
        const int port = 8080;
        //public static List<user> users=new List<user>();
        //public static user tmpuser=new user();
        public static TcpListener listener1;
        public static Thread conn;
        static bool doneserv;
        public static string host = Dns.GetHostName();
        public static string ip = Dns.GetHostByName(host).AddressList[0].ToString();
 
        static void Main(string[] args)
        {
            IPAddress localhost = IPAddress.Parse(ip);
            listener1 = new TcpListener(localhost, port);
            listener1.Start();
            Console.WriteLine("Server IP:{0}, Server port:{1}", ip, port);
            Console.WriteLine("Server Started...");
            conn = new Thread(connection);
            conn.Start();
        }
       
            public static string readmsg(TcpClient client)
            {
                byte[] buff = new byte[255];
                int totalread = 0;
                do
                {
                    int read = client.GetStream().Read(buff, totalread, buff.Length - totalread);
                    totalread += read;
                } while (client.GetStream().DataAvailable);
                return Encoding.Unicode.GetString(buff, 0, totalread);
            }
 
            public static void handthread(object obj)
            {
                TcpClient client = obj as TcpClient;
                bool done = false;
                while (!done)
                {
                    string msg = readmsg(client); 
                    Console.WriteLine(msg);;
                    sendmsgall(client, msg);
                }
                client.Close();
            }
            public static void connection()
            {
                doneserv = false;
                Thread thread;
                while (true)
                {
                    TcpClient client = listener1.AcceptTcpClient();
                    Console.WriteLine("User connected  {0}", client.Client.RemoteEndPoint.ToString());
                    user u = new user();
                    u.client1 = client;
                    thread = new Thread(new ParameterizedThreadStart(handthread));
                    thread.Start(client);                   
                }
 
 
            }
            public static void sendmsgall(TcpClient client, string msg)
            {
                byte[] buff = Encoding.Unicode.GetBytes(msg); 
                client.GetStream().Write(buff, 0, buff.Length);
 
            }
            public class user
            {
 
                public TcpClient client1;
 
            }
        
    }
}
код клиента
C#
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Net.NetworkInformation;
 
namespace client
{
    public partial class Form1 : Form
    {
        public static TcpClient client1;
        public static string a = Dns.GetHostName();
        public static string b = Dns.GetHostByName(a).AddressList[0].ToString();        
        Thread read;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string a = "";
            a += DateTime.Now.ToLongTimeString() + ": " + textBox1.Text + "\n\r";
            sendmsg(client1, a, "m");          
            textBox1.Text = "";
        }
        public void sendmsg(TcpClient client, string msg, string flag)
        {
                byte[] bytes = Encoding.Unicode.GetBytes(msg);
                client.GetStream().Write(bytes, 0, bytes.Length);
            
                
            
        }
        public static string readmsg(TcpClient client)
        {
            byte[] buff = new byte[255];
            int totalread = 0;
            do
            {
                int read = client.GetStream().Read(buff, totalread, buff.Length - totalread);
                totalread += read;
            } while (client.GetStream().DataAvailable);
            return Encoding.Unicode.GetString(buff, 0, totalread);
        }
        public void handthread(object obj)
        {   TcpClient client = obj as TcpClient;
            while (true)
            {
                string msg = readmsg(client); 
                richTextBox1.Invoke((MethodInvoker)(delegate() { richTextBox1.Text += msg; }));
            }
            
            client.Close();
        }
       
 
   
        private void button2_Click(object sender, EventArgs e)
        {
            
        }
 
        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            client1 = new TcpClient();
            if (textBox2.Text != "")
            {
                client1 = new TcpClient();
                client1.Connect(IPAddress.Parse(textBox2.Text), Convert.ToInt32(textBox3.Text));
                richTextBox1.Text += "Сервер запущен\n";
                read = new Thread(new ParameterizedThreadStart(handthread));
                read.Start(client1);
                sendmsg(client1, "Connected", "c");
            }
            else
                MessageBox.Show("Заполните IP и порт!"); 
        }
 
        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
                if(client1.Connected)
                
                richTextBox1.Text +=  "  Вы отключились! ";
        }
 
            }
 
}
Сервер возвращает сообщения только на тот клиент, с которого они были посланы, а на другие не пересылает, в чем причина?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2013, 18:58
Ответы с готовыми решениями:

Нужно чтобы все клиенты, подключенные к COM серверу, получали сообщения.
Работаю на C++ Builder 5. Получается следующая проблема: к COM серверу подключается клиент - события проходят нормально, но если к серверу...

Как перехватить все то, что посылает и получает Internet Explorer ?
Как перехватить все то, что посылает и получает Internet Explorer ?

Связь клиенты-сервер-клиенты (Animate CC)
Сделал небольшое приложение для Андроид в Animate CC. Нужно, чтобы ВСЕ пользователи приложения могли осуществлять свои действия, и видеть...

2
 Аватар для Игрок_со_Смерть
37 / 37 / 6
Регистрация: 06.01.2013
Сообщений: 195
02.03.2013, 12:52
Во первых Стандарт оформления кода C# ну уж очень неудобно искать твои переменные =(

C#
1
2
doneserv 
totalread
И методы

C#
1
2
readmsg
sendmsgall
Добавлено через 1 минуту
Во вторых
C#
1
client.GetStream().Write(buff, 0, buff.Length);
тут ты записываешь сообщение на последний клиент который прислал тебе собщение

Добавлено через 4 минуты
И зачем в цикле для подключения создаешь экземпляр класса ?

C#
1
2
3
4
5
6
7
8
9
while (true)
                {
                    TcpClient client = listener1.AcceptTcpClient();
                    Console.WriteLine("User connected  {0}", client.Client.RemoteEndPoint.ToString());
                    [B]user u = new user();[/B]
                    u.client1 = client;
                    thread = new Thread(new ParameterizedThreadStart(handthread));
                    thread.Start(client);                   
                }
0
1 / 1 / 1
Регистрация: 26.11.2011
Сообщений: 33
02.03.2013, 20:21  [ТС]
Проблему решил созданием экземпляров класса при подключении и добавлении их в список List и последующей рассылкой сообщений по этому списку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.03.2013, 20:21
Помогаю со студенческими работами здесь

Личные сообщения | Все сообщения одному человеку | Сессии
Подскажите пожалуйста, у меня проблема. Пишу код личных сообщений, все хорошо, но я не могу понять как можно в сессию записать разные...

Чат. Нужно чтобы все клиенты видели отправленное сообшение
Просьба помочь. Я новичок в C#. Хочу создать многопользовательский ЧАТ. Есть клиент, и сервер. Загвоздка в том что клиент видит...

Создать централизованную базу данных, где будут храниться все клиенты, всех офисов
Доброго времени суток ! Есть проблема одна. Несколько офисов, работают ведут учет клиентов в excell - файле. Естественно все это...

Удалить из таблицы Клиенты всех клиентов, не сделавших ни одного заказа за все время существования фирмы, или сделавших последний заказ более 10 лет
Удалить из таблицы Клиенты всех клиентов, не сделавших ни одного заказа за все время существования фирмы, или сделавших последний заказ...

Сохранить все сообщения Vk
Здравствуйте. Нужно решить такой вот вопрос. Мне необходимо что бы вся переписка из вк, и в ходящие и исходящие сообщения, сохранялись где...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru