Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
snyppimylt
8 / 8 / 0
Регистрация: 18.12.2011
Сообщений: 400
1

Socket для Visual C++ на .NET

30.10.2013, 15:12. Просмотров 1502. Ответов 6
Метки нет (Все метки)

Кто разбирается в сокетах на С++ с использованием .Net ? нужно переписать код сервер-приложения с C# на Manaager 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
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
 
namespace SocketServer
{
    class Program
    {
        static void Main(string[] args)
        {
            // Устанавливаем для сокета локальную конечную точку
            IPHostEntry ipHost = Dns.GetHostEntry("localhost");
            IPAddress ipAddr = ipHost.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);
 
            // Создаем сокет Tcp/Ip
            Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
 
            // Назначаем сокет локальной конечной точке и слушаем входящие сокеты
            try
            {
                sListener.Bind(ipEndPoint);
                sListener.Listen(10);
 
                // Начинаем слушать соединения
                while (true)
                {
                    Console.WriteLine("Ожидаем соединение через порт {0}", ipEndPoint);
 
                    // Программа приостанавливается, ожидая входящее соединение
                    Socket handler = sListener.Accept();
                    string data = null;
 
                    // Мы дождались клиента, пытающегося с нами соединиться
                    
                    byte[] bytes = new byte[1024];
                    int bytesRec = handler.Receive(bytes);
                    
                    data += Encoding.UTF8.GetString(bytes, 0, bytesRec);
                    
                    // Показываем данные на консоли
                    Console.Write("Полученный текст: " + data + "\n\n");
                    
                    // Отправляем ответ клиенту\
                    string reply = "Спасибо за запрос в " + data.Length.ToString()
                            + " символов";
                    byte[] msg = Encoding.UTF8.GetBytes(reply);
                    handler.Send(msg);
 
                    if (data.IndexOf("<TheEnd>") > -1)
                    {
                        Console.WriteLine("Сервер завершил соединение с клиентом.");
                        break;
                    }
                    
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                Console.ReadLine();
            }
        }
    }
}
код взял из одного из сайтов по С# . стал переписывать самостоятельно но наткнулся на другие подводные камни с такими как

1>c:\\****\*****\*****\****\client\client\Form1.h(128) : error C2664: int System::Net::Sockets::Socket::Receive(cli::array<Type,dimension> ^): невозможно преобразовать параметр 1 из 'cli::array<Type> ^' в 'cli::array<Type,dimension> ^'
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
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
 
                 // Локальная точка - данные для коннекта
IPHostEntry^ ipH = Dns::GetHostEntry("localhost");
IPAddress^ ipAdd = ipH->AddressList[0];
IPEndPoint^ ipEp = gcnew IPEndPoint(ipAdd,11000);
 
// Создаем сокет tcp/ip 
 
Socket^ sL = gcnew Socket( AddressFamily::InterNetwork, SocketType::Stream, ProtocolType::Tcp);
 
try
{
    sL->Bind(ipEp);
    sL->Listen(10);
    
    ///...
    while(true)
    {
 
        Socket^ hdl = sL->Accept();
        String^ dat = "";
            
        array<Byte^> ^bt = gcnew array<Byte^>(1024);
        
 
 
    Int32 br = hdl->Receive(bt); // ошибка
 
        
        textBox1->Text= dat;
    }
    
 
}
             }
код сам не дописан.

в mdsn лезть не хочется, хочется конкретно разобраться в данном примере

Проект пишу на WFA.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2013, 15:12
Ответы с готовыми решениями:

Объясните ошибки в программе из книги "Visual C++.NET Для чайников"
// Демонстрация графических возможностей .Net #include &quot;stdafx.h&quot; #using...

Опишите возможности применения интегрированной среды Visual C++.NET
Опишите возможности применения интегрированной среды Visual C++.Net для...

Как понизить используемую версию .NET Framework (Visual Studio 2012)
Здравствуйте, после установки Visual Studio 2012 возникла проблема с проектом...

Отправить POST запрос PHP скрипту (перевести код с Visual Basic .NET)
Здравствуйте уважаемые форумчане. Начал увлекаться программированием на C++/CLI...

Перенос проекта Visual C++ 2015 с использованием .NET библиотеки System.Xml на Linux
Доброй ночи! Написал XML-парсер, который использует библиотеку System.xml.dll,...

6
MrCold
30.10.2013, 15:46
  #2

Не по теме:

Смысл таких переводов ? Менять точки на стрелочки . Ну и пишите на C#

0
snyppimylt
8 / 8 / 0
Регистрация: 18.12.2011
Сообщений: 400
30.10.2013, 15:58  [ТС] 3
Цитата Сообщение от MrCold Посмотреть сообщение

Не по теме:

Смысл таких переводов ? Менять точки на стрелочки . Ну и пишите на C#

Ответьте по теме т.к. я люблю больше С++ и на Vusial Studio на формах после Visual Basic 6 делать приложения в самый раз. Есть конечно альтернатива по лучше такая как Qt, но мне он не нужен.
0
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
30.10.2013, 16:00 4
Увидел, отвечаю
Цитата Сообщение от snyppimylt Посмотреть сообщение
array<Byte^> ^bt = gcnew array<Byte^>(1024);
Там Byte - тип значения
C++
1
array<Byte> ^bt = gcnew array<Byte>(1024);
0
snyppimylt
8 / 8 / 0
Регистрация: 18.12.2011
Сообщений: 400
30.10.2013, 17:08  [ТС] 5
Цитата Сообщение от MrCold Посмотреть сообщение
Увидел, отвечаю

Там Byte - тип значения
C++
1
array<Byte> ^bt = gcnew array<Byte>(1024);
данная версия кода неработоспособная
0
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
30.10.2013, 17:26 6
Цитата Сообщение от snyppimylt Посмотреть сообщение
данная версия кода неработоспособная
По приведенному вами куску перевода,
студия ругается здесь

C++
1
IPAddress^ ipAdd = ipH->AddressList[0];
приходится явно приводить
C++
1
IPAddress^ ipAdd = (IPAddress^)ipH->AddressList[0];
больше ошибок не выдает
0
snyppimylt
8 / 8 / 0
Регистрация: 18.12.2011
Сообщений: 400
30.10.2013, 17:41  [ТС] 7
Спасибо и на этом
0
30.10.2013, 17:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2013, 17:41

Error #: 306 : constructor Socket(java.net.SocketImpl) has protected access in class java.net.Socket at line 282, column 32
привет , как сделать чтобы это компилилось а не выдавало ошибок sock = new...

Nodejs net socket server and android socket client
Добрый день Форумчане нужно помощь гуру! Решил с другом написать сервер на ноде...

Как открыть файлы в формате visual studio .net 2003 в visual studio net 2002?
Возможно ли открыть файлы в формате visual studio .net 2003 в visual studio...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru