Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2011, 15:50   #1
kestugar
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 28
Лампочка Чат через файловый сервер(C#)

Есть рабочий чат через файловый сервер.
Изначально идет обнуление файла. Клиент отправляет сообщение, нажимает отправить. Оно записывается в файл. Если нажать "receive", то на любом из клиентов появляется это сообщение.
Нужно сделать так, чтобы сообщения автоматически посылались клиентам после отправки.
/* В какую часть кода впихнуть этот кусок Клиента, что бы запрос содержимого файла шел автоматически???

Sock.Send(Encoding.ASCII.GetBytes(" yadumaychoetustrokumaloktosmogetvve stisluchay no"));
i = Sock.Receive(remdata);
textBox4.Text = Encoding.ASCII.GetString(remdata, 0, i).Trim(); */

Заранее спасибо.

Клиент
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Net.Sockets;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        TcpClient Client = new TcpClient();
        Socket Sock;
        int i = 0;
        byte[] remdata =new byte[1024];
 
        private void button1_Click(object sender, EventArgs e)
        {
            string ip = comboBox1.Text;
            int port = Convert.ToInt32(textBox1.Text);
            try
            {
                Sock = Client.Client;
                Client.Connect(ip, port);
                textBox2.Text="Successful";
                Sock.Send(Encoding.ASCII.GetBytes("[" + DateTime.Now.ToString("HH:mm:ss") + "] " + textBox5.Text + " connected"));
            }
            catch
            {
                textBox2.Text="Not Connection";
                return;
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Sock.Send(Encoding.ASCII.GetBytes("[" + DateTime.Now.ToString("HH:mm:ss") + "] " + textBox5.Text + ": " + textBox3.Text));
            textBox3.Text = "";
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            Sock.Send(Encoding.ASCII.GetBytes("[" + DateTime.Now.ToString("HH:mm:ss") + "] " + textBox5.Text + " disconnected"));
            Sock.Close();
            Client.Close();
            this.Close();
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            Sock.Send(Encoding.ASCII.GetBytes("yadumaychoetustrokumaloktosmogetvvestisluchayno"));
            i = Sock.Receive(remdata);
            textBox4.Text = Encoding.ASCII.GetString(remdata, 0, i).Trim();
        }
    }
}

Последний раз редактировалось kestugar; 12.12.2011 в 15:53.
kestugar вне форума Ответить с цитированием
Старый 12.12.2011, 15:54   #2
kestugar
Пользователь
 
Регистрация: 25.03.2011
Сообщений: 28
По умолчанию

Сервер
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
 
namespace MPserver
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamWriter sw = new StreamWriter("log.txt");
            sw.WriteLine("");
            sw.Close();
            int port = 9999;
            string cmd;
            serverMN smn = new serverMN(port);
            smn.Start();
            Console.WriteLine("[" + DateTime.Now.ToString("HH:mm:ss") + "] Creating server...");
            while (true)
            {
                Console.WriteLine("[" + DateTime.Now.ToString("HH:mm:ss") + "] Created. Type EXIT to close server");
                cmd = Console.ReadLine();
                if (cmd == "EXIT")
                {
                    return;
                }
            }
        }
    }
    class serverMN
    {
        private Socket s;
        private int Port;
        public serverMN(int port)
        {
            Port = port;
        }
 
        private class ConnectionInfo
        {
            public Socket Socket;
            public Thread Thread;
        }
 
        private Thread Th;
        private List<ConnectionInfo> connect = new List<ConnectionInfo>();
 
        public void Start()
        {
            SetupServerSocket();
            Th = new Thread(AcceptConnections);
            Th.IsBackground = true;
            Th.Start();
        }
 
        private void SetupServerSocket()
        {
            //Получаем информацию о локальном компьютере
            IPEndPoint myEndPort = new IPEndPoint(IPAddress.Any, Port);
            //Создаем сокет, привязываем его к адресу
            s = new Socket(myEndPort.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            s.Bind(myEndPort);
            s.Listen((int)SocketOptionName.MaxConnections);
        }
 
        private void AcceptConnections()
        {
            while (true)
            {
                //Принимаем соединение
                Socket socket = s.Accept();
                ConnectionInfo connection = new ConnectionInfo();
                connection.Socket = socket;
                //Создаем поток для получения данных
                connection.Thread = new Thread(ProcessConnection);
                connection.Thread.IsBackground = true;
                connection.Thread.Start(connection);
                //Сохраняем сокет
                lock (connect) connect.Add(connection);
            }
        }
        private void ProcessConnection(object state)
        {            
            ConnectionInfo connection = (ConnectionInfo)state;
            byte[] bufer = new byte[1024];
            string data;
            try
            {
                while (true)
                {
                    int i = connection.Socket.Receive(bufer);
                    if (i > 0)
                    {
                        data = Encoding.ASCII.GetString(bufer, 0, i).Trim();
                        if (data == "yadumaychoetustrokumaloktosmogetvvestisluchayno")
                        {
                            StreamReader sr = new StreamReader("log.txt");
                            string str = "";
                            while (!sr.EndOfStream)
                            {
                                str += sr.ReadLine() + "\r\n";
                            }
                            sr.Close();
                            connection.Socket.Send(Encoding.ASCII.GetBytes(str));
                        }
                        else
                        {
                            StreamReader sr = new StreamReader("log.txt");
                            string str = "";
                            while (!sr.EndOfStream)
                            {
                                str += sr.ReadLine() + "\r\n";
                            }
                            sr.Close();
                            Console.WriteLine(data);
                            StreamWriter sw = new StreamWriter("log.txt");
                            sw.WriteLine(data + "\r\n" + str);
                            sw.Close();
                        }
                    }
                    else if (i == 0)
                        return;
                }
            }
            catch (SocketException exc)
            {
                Console.WriteLine("Socket exception:" + exc.SocketErrorCode);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Exception:" + exc);
            }
            finally
            {
                connection.Socket.Close();
                lock (connect) connect.Remove(connection);
            }
        }
    }
}
kestugar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графический чат через многопоточный сервер (С#) kestugar Помощь студентам 2 19.12.2011 23:06
Чат клиент-сервер pavelslap PHP 0 06.12.2010 20:49
клиент-сервер чат djetx Работа с сетью в Delphi 8 12.10.2010 20:37
файловый сервер на подобии HFS bookkc Помощь студентам 0 23.06.2010 19:26
Файловый сервер Droniwe Работа с сетью в Delphi 5 13.05.2009 08:17