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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки и сокеты 
:(
    Опции темы
Divers
Дата 17.4.2010, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сразу к коду:
Код
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.IO;
using System.Net.Sockets;
using System.Threading;


namespace tcpclient
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        TcpClient client = new TcpClient();
       

        private void сетьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form _MyForm=new Form2();
            _MyForm.ShowDialog();
        }

        private void настройкиToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string ipadress;
            int port;
            try
            {
                StreamReader ip = new StreamReader("c://ip.txt"); //считываем из файла введенный IP и порт
                ipadress = ip.ReadLine();

                StreamReader pt = new StreamReader("c://pt.txt"); //считываем из файла введенный IP и порт
                port = Convert.ToInt32(pt.ReadLine());
            }
            catch
            {
                System.Windows.Forms.MessageBox.Show("ошибка чтения из файла");
                return;
            }

            try
            {
                client.Connect(ipadress, port);// пробуем присоединиться к серверу
            }
            catch
            {
            
              System.Windows.Forms.MessageBox.Show("Ошибка подключения." +"  IP:"+ipadress+ "  Порт:"+port);
              return;
            }
            System.Windows.Forms.MessageBox.Show("Удачное подключение" +"  IP:"+ipadress+ "  Порт:"+port);
            //Здесь хотелось бы запускать поток который ожидает получения сообщений от сервера.( Recdate)
        }

        public void Recdate(object Sock)
    {
        byte[] remdata = { }; // Данные с сервера
        while (client.Connected)
        {
        Sock.Receive(remdata);
        richTextBox2.Text = "<<" + " " + Encoding.ASCII.GetString(remdata) + richTextBox2.Text;
        }
    }

         public void button2_Click(object sender, EventArgs e) //отправка сообщения на сервер
        {

            Socket Sock = client.Client;

            if (client.Connected)
            {
                Sock.Send(Encoding.ASCII.GetBytes(richTextBox1.Text));
                richTextBox2.Text = ">>" + " " + richTextBox1.Text + richTextBox2.Text ;
                richTextBox1.Text = "";
                Thread t = new Thread(Recdate);
                t.Start(Sock);

            }
            else
            {
                System.Windows.Forms.MessageBox.Show("установите соединение с сервером");
                return;
            }
        }

         private void EnterSend(object sender, KeyEventArgs e) 
         {
             if (e.KeyCode == Keys.Enter)
                 button2_Click(sender, e);
         }
    }
}

И так, что хочется сделать:
- По присоединению к серверу сразу запускать поток, который ожидает получения сообщений от сервера, и при получении его выводить на richTextbox2;

Почему не получается сделать:
- Не знаю как передать в поток переменную Sock которая создается по клику на Button2 ( Socket Sock = client.Client; )
- Не знаю можно ли 2м потокам одновременно использовать один сокет, или же их надо как то синхронизировать, то есть если получаем сообщение, то основной отсылать в этот момент нельзя, то есть основной поток надо усыпить и наоборот.

C# изучаю 2 недели, так что если это возможно подскажите наиболее простыми словами), с примером реализации, заранее спасибо.

PM MAIL   Вверх
uranpro
Дата 4.5.2010, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

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



Цитата(Divers @  17.4.2010,  20:05 Найти цитируемый пост)
C# изучаю 2 недели

и сразу
Цитата(Divers @  17.4.2010,  20:05 Найти цитируемый пост)
Потоки и сокеты

?
не хорошо. даже не знаю с чего начать. наверно, с изучения того, как устроена работа с памятью(внимательно! и узнать все про Stream`ы), потом делегаты, Exceptions, потоки, асинхронные модели, сокеты, TcpClient & TcpListner


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




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


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

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