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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2015, 13:24   #21
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

У вас пример плохой, и точ то он не работает не вызывает удивления.
come-on вне форума Ответить с цитированием
Старый 22.10.2015, 14:39   #22
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Предложите, пожалуйста, хороший пример?
Krasi вне форума Ответить с цитированием
Старый 22.10.2015, 15:08   #23
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

В интернете их много. https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx
come-on вне форума Ответить с цитированием
Старый 23.10.2015, 10:34   #24
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Так а я этот пример уже пробовал. говорю, все работает, данные с клиента на сервер передаю. А мне лень переделывать это на Windows Forms, потому что я вообще не понимаю, как вечный while заменить. Хотя видел несколько предложений, но для меня это так мутно. Поэтому спрашиваю, есть ли какие-то решения ближе к Windows Forms? Или тогда так и предложите мне, как перенести эти примеры в только что созданные приложения Windows Forms, я попробую.
Krasi вне форума Ответить с цитированием
Старый 23.10.2015, 11:32   #25
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Сокетам все равно кто там выше, консоль, формы, сервис или еще что.
Вы сначала разберитесь как оно работает. Иначе вам проще нанять программиста.
come-on вне форума Ответить с цитированием
Старый 23.10.2015, 13:09   #26
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

да говорю, понял, вроде. Хотя вот именно, что-то же не понимаю. Давайте перейдем к конкретному коду клиента на базе Вашей ссылки.
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            try
            {
                SendMessageFromSocket(10000);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                Console.ReadLine();
            }
        }

        static void SendMessageFromSocket(int port)
        {
            // Буфер для входящих данных
            byte[] bytes = new byte[1024];

            // Соединяемся с удаленным устройством

            // Устанавливаем удаленную точку для сокета
            IPHostEntry ipHost = Dns.GetHostEntry("localhost");
            IPAddress ipAddr = ipHost.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);

            Socket sender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            // Соединяем сокет с удаленной точкой
            sender.Connect(ipEndPoint);

            richTextBox1.AppendText("sdf");
                //Write("Введите сообщение: ");
            string message = Console.ReadLine();

            Console.WriteLine("Сокет соединяется с {0} ", sender.RemoteEndPoint.ToString());
            byte[] msg = Encoding.UTF8.GetBytes(message);

            // Отправляем данные через сокет
            int bytesSent = sender.Send(msg);

            // Получаем ответ от сервера
            int bytesRec = sender.Receive(bytes);

            Console.WriteLine("\nОтвет от сервера: {0}\n\n", Encoding.UTF8.GetString(bytes, 0, bytesRec));

            // Используем рекурсию для неоднократного вызова SendMessageFromSocket()
            if (message.IndexOf("<TheEnd>") == -1)
                SendMessageFromSocket(port);

            // Освобождаем сокет
            sender.Shutdown(SocketShutdown.Both);
            sender.Close();
        }

        private void richTextBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {

        }


    }



}
Это запускается в WF с одним Но - я не знаю, как сейчас вместо вывода в консоль вывести в richTextBox1.
Не могу найти этот элемент. Как нужно исправить структуру, или что не так? Причем, я понимаю, что надо в функцию передавать значения этих кнопок, либо не выводить из функции ничего... Но как- не знаю.

Последний раз редактировалось Krasi; 23.10.2015 в 13:16.
Krasi вне форума Ответить с цитированием
Старый 23.10.2015, 13:20   #27
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Если делать без функции, то как переписать рекурсию?
Krasi вне форума Ответить с цитированием
Старый 23.10.2015, 13:24   #28
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

У вас метод static, потому и не видите.
Что бы понимать чужой код и писать свой надо как минимум знать язык на котором это всё.
come-on вне форума Ответить с цитированием
Старый 23.10.2015, 13:28   #29
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

И этот код не на базе моей ссылки, я даже не знаю откуда он такой.
come-on вне форума Ответить с цитированием
Старый 23.10.2015, 14:46   #30
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Ну пускай будет этот пример. Сейчас он у меня запускается, и когда сервер отключен, рисует form и отображает ошибку в ней, что соединения нет.

Но вот запускаю сервер и хочу посмотреть, что ждет дальше. А у меня даже окно не открывается. Почему? Программа зависает в задачах сокета или как?

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            try
            {
                SendMessageFromSocket(10000);
            }
            catch (Exception ex)
            {
                richTextBox1.Text = ex.ToString();
            }
            finally
            {
                //Console.ReadLine();
            }
        }

        private void SendMessageFromSocket(int port)
        {
            // Буфер для входящих данных
            byte[] bytes = new byte[1024];

            // Соединяемся с удаленным устройством

            // Устанавливаем удаленную точку для сокета
            IPHostEntry ipHost = Dns.GetHostEntry("localhost");
            IPAddress ipAddr = ipHost.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);

            Socket sender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            // Соединяем сокет с удаленной точкой
            sender.Connect(ipEndPoint);

            richTextBox1.Text = "Введите сообщение";
            string message = richTextBox2.Text;

            richTextBox1.Text = "Сокет соединяется";//("Сокет соединяется с {0} ", sender.RemoteEndPoint.ToString());
            byte[] msg = Encoding.UTF8.GetBytes(message);

            // Отправляем данные через сокет
            int bytesSent = sender.Send(msg);

            // Получаем ответ от сервера
            int bytesRec = sender.Receive(bytes);

            richTextBox1.Text = "Ответ от сервера";
            richTextBox2.Text = Encoding.UTF8.GetString(bytes, 0, bytesRec);

            // Используем рекурсию для неоднократного вызова SendMessageFromSocket()
            if (message.IndexOf("<TheEnd>") == -1)
                SendMessageFromSocket(port);

            // Освобождаем сокет
            sender.Shutdown(SocketShutdown.Both);
            sender.Close();
        }

        private void richTextBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
Krasi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать данные в поток.. login10 C# (си шарп) 9 01.11.2014 15:08
Как передать данные из WebBrowser'a ? Santa86 C# (си шарп) 0 15.10.2014 17:42
как передать на сервер табличные данные Arassir PHP 3 02.10.2011 23:07
Как передать данные из БД в ComBox uni Microsoft Office Excel 8 22.07.2011 08:20
Как передать данные уже в запущеную программу dr.Chas Общие вопросы Delphi 15 18.06.2008 22:16