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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание не многопользовательского чата 
:(
    Опции темы
Slash2999
  Дата 15.11.2010, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно написать чат на С#. (Не многопользовательский), а просто между двумя пользователями. Один из которых будет сервером, а другой клиентом. Конечно суть задачи не в этом. Но именно с этим возникла проблема. Помогите разобраться с сокетами. Сидел на МСДН 4 часа, там описано все о функциях, классах и их областях видимости но нет нормальных живых примеров.

Я студент и никогда еще не пользовался сетевыми технологиями шарпа. Это курсовая работа, и суть работы далеко не в чате а в криптографическом кодировании пересылаемой информации. Алгоритмы кодирования и крипто - анализа уже разработал.

Вот по средствам одной книжечки собрал сервер и клиент в которых: Сервер ожидает подключения клиента, и может отправлять ему сообщения (После каждого сообщения происходит пере подключение)
Как добится отправки сообщения от клиента к серверу?

Пока что в консольных приложениях.

код сервера:

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net.Sockets;
 
namespace ConsoleServer
{
   class Program
   {
       private void Listen()
       {
           TcpListener tcpl = new TcpListener(50001);
           
           string a;
           int i = 0;
           char b=' ';
 
           tcpl.Start();
 
           for (; ; )
           {
 
               Socket newSocked = tcpl.AcceptSocket();
                             
                   Console.WriteLine("User connected");
                   
                       a = Convert.ToString(Console.ReadLine());
 
                       if (newSocked.Connected)
                       {                                                      
                           NetworkStream ns = new NetworkStream(newSocked);
 
                           for (i = 0; i < a.Length; i++)
                           {
                               b = Convert.ToChar(a[i]);
                               byte[] buf = { Convert.ToByte(b) };
 
                               ns.Write(buf, 0, 1);
                            }
                                                       
                           ns.Flush();
                           ns.Close();
                       }
         
               newSocked.Close();
              // break;
           }
           
       }
 
       public static void Main(string[] args)
       {
 
           Program listener = new Program();
           listener.Listen();
           
       }
   }
}



код клиента:

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net.Sockets;
 
namespace Localhost
{
   class Program
   {
       public static void Main(string[] args)
       {
           for (; ; )
           {
               TcpClient newSocked = new TcpClient("localhost", 50001);
               NetworkStream ns = newSocked.GetStream();
               byte[] buf = new byte[100];
               ns.Read(buf, 0, 100);
               char x;
               string str="";
               char[] buff = new char[100];
 
               for (int i = 0; i < 100; i++)
               {
                   buff[i] = (char)buf[i];
                   x = buff[i];
                   str += x;
               }
               Console.WriteLine(str);
 
               ns.Close();
               newSocked.Close();
           }
 
       }
   }
}




Если бы удалось найти исходный код сервера и клиента которые обмениваются друг с другом сообщениями, скорее всего разобрался бы сам, при помощи мсдн. А без живого примера отдельно описанные классы на мсдн не очень то помогают.
За ранее спасибо за помощь. 
PM MAIL   Вверх
SoWa
Дата 15.11.2010, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Асинхронный серверный сокет
Асинхронный клиентский сокет

Пример консольного синхронного серверного сокета
Он же в другом виде.

А вот пример клиента для синхронного сервера:
Код

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;
using System.Net.Sockets;

namespace SocketClient
{

    public partial class Form1 : Form
    {

        public Socket Server;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Server.Send(Encoding.UTF8.GetBytes(textBox1.Text));
        }

        private void button2_Click(object sender, EventArgs e) // Connect Button
        {
            IPHostEntry Iphe = Dns.Resolve(Dns.GetHostName());
            IPEndPoint Ipep = new IPEndPoint(Iphe.AddressList[0], 4444);
            Server = new Socket(Ipep.Address.AddressFamily,
            SocketType.Stream, ProtocolType.Tcp);
            Server.Connect(addresTextBox.Text, Convert.ToInt32(portTextBox.Text));
        }

        private void button3_Click(object sender, EventArgs e) // Disconnect Button
        {
            Server.Disconnect(true);
        }
    }

    class TcpSock
    {
        int tcpIndx = 0;
        int tcpByte = 0;
        byte[] tcpRecv = new byte[1024];

        ////////////////////////////////////////
        public Socket tcpSock;
        ////////////////////////////////////////

        public int Recv(ref string tcpRead)
        {
            tcpByte = tcpSock.Available;
            if (tcpByte > tcpRecv.Length - tcpIndx)
                tcpByte = tcpRecv.Length - tcpIndx;

            tcpByte = tcpSock.Receive(tcpRecv, tcpIndx, tcpByte,
                SocketFlags.Partial);
            tcpRead = Encoding.ASCII.GetString
                (tcpRecv, tcpIndx, tcpByte);
            tcpIndx += tcpByte;
            return tcpRead.Length;
        }

        public int RecvLn(ref string tcpRead)
        {
            tcpRead = Encoding.ASCII.GetString
                (tcpRecv, 0, tcpIndx);
            tcpIndx = 0;
            return tcpRead.Length;
        }

        public int Send(string tcpWrite)
        {
            return tcpSock.Send(Encoding.ASCII.GetBytes(tcpWrite));
        }

        public int SendLn(string tcpWrite)
        {
            return tcpSock.Send(Encoding.ASCII.GetBytes(tcpWrite + "\r\n"));
        }
    }

}



Это сообщение отредактировал(а) SoWa - 15.11.2010, 09:00


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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