Помогите пожалуйста из с++ в шарп перевести такие строки:
char buff[1024];
ip::udp::socket sock(service, ip::udp::endpoint(ip::udp::v4(), 8001));
while (true) {
ip::udp::endpoint sender;
int bytes = sock.receive_from(buffer(buff), sender);
stringstream ss;
byte offlineMessageDataId[] = { 0x00, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfd, 0x12, 0x34, 0x56, 0x78 };
ss << 0x3c << 1 << 22345 << offlineMessageDataId << "Hello world!";
sock.send_to(buffer(ss.str()), sender);
}
Уже час пытаюсь понять как. Спасибо!
Другие языки программирования и технологии
Перевести C++ => C# Помогите пожалуйста!
//Я-бы не использовал stringstream -> StringBuilder/Writer,
//тем более он динамически расширяет память при добавлении.
//ИМХО Примерно так:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class demo
{
static void Main() {
byte[] buf = new byte[1024];
byte[] header = new byte[] {0x3C, 0x01, 0x57, 0x49};
byte[] offlineMessageDataId = new byte[] { 0x00, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfd, 0x12, 0x34, 0x56, 0x78 };
//Здесь Вам надо определиться с IP адресом.
//Непонятно что у Вас там за service и с чем связана
IPEndPoint host = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001);
Socket s = new Socket (host.AddressFamily, SocketType.Stream, ProtocolType.Udp);
while(true) {
//Созаем EndPoint для захвата отправителя.
IPEndPoint senderIP = new IPEndPoint(IPAddress.Any, 0);
EndPoint sender = (EndPoint)senderIP;
int bytes = s.ReceiveFrom(buf, ref sender);
//Вместо stringstream/stringbuilder
//Копируем заголовок в buf
Array.Copy(header, buf, header.Length);
//Копируем offlineMessageData
Array.Copy(offlineMessageDataId, 0, buf, header.Length, offlineMessageDataId.Length);
//Создаем массив из byte из строки. Здесь Вам нужно определиться с кодировкой, которую использует отправитель/сервер
byte[] msg = Encoding.UTF8.GetBytes ("Hello world!");
Array.Copy(msg, 0, buf, header.Length + offlineMessageDataId.Length, msg.Length);
s.SendTo(
buf,
header.Length + offlineMessageDataId.Length + msg.Length,
SocketFlags.None,
sender
);
}
}
}
P.S: Всё компилируется (но строку отправки и отсылки у себя закомментировал, т. к. мне естественно не проверить, т. к. нет сервера.
В данном случае имеет смысл объединить header и offlineMsg... в один массив.
Некоторые переменные можно вынести за цикл. Тут уже Вам виднее.
//тем более он динамически расширяет память при добавлении.
//ИМХО Примерно так:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class demo
{
static void Main() {
byte[] buf = new byte[1024];
byte[] header = new byte[] {0x3C, 0x01, 0x57, 0x49};
byte[] offlineMessageDataId = new byte[] { 0x00, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfd, 0x12, 0x34, 0x56, 0x78 };
//Здесь Вам надо определиться с IP адресом.
//Непонятно что у Вас там за service и с чем связана
IPEndPoint host = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001);
Socket s = new Socket (host.AddressFamily, SocketType.Stream, ProtocolType.Udp);
while(true) {
//Созаем EndPoint для захвата отправителя.
IPEndPoint senderIP = new IPEndPoint(IPAddress.Any, 0);
EndPoint sender = (EndPoint)senderIP;
int bytes = s.ReceiveFrom(buf, ref sender);
//Вместо stringstream/stringbuilder
//Копируем заголовок в buf
Array.Copy(header, buf, header.Length);
//Копируем offlineMessageData
Array.Copy(offlineMessageDataId, 0, buf, header.Length, offlineMessageDataId.Length);
//Создаем массив из byte из строки. Здесь Вам нужно определиться с кодировкой, которую использует отправитель/сервер
byte[] msg = Encoding.UTF8.GetBytes ("Hello world!");
Array.Copy(msg, 0, buf, header.Length + offlineMessageDataId.Length, msg.Length);
s.SendTo(
buf,
header.Length + offlineMessageDataId.Length + msg.Length,
SocketFlags.None,
sender
);
}
}
}
P.S: Всё компилируется (но строку отправки и отсылки у себя закомментировал, т. к. мне естественно не проверить, т. к. нет сервера.
В данном случае имеет смысл объединить header и offlineMsg... в один массив.
Некоторые переменные можно вынести за цикл. Тут уже Вам виднее.
Нетривиальная слишком задача. Протокол редкий - UDP.
Тут не понимать надо, а либо уже знать средства для работы с этим протоколом в C#, либо изучить их по ходу дела. Без опыта с более простыми протоколами, навыков сниффинга и т. д. будет слишком сложно.
Только если за деньги на фрилансе cyberforum.ru/freelance
Тут не понимать надо, а либо уже знать средства для работы с этим протоколом в C#, либо изучить их по ходу дела. Без опыта с более простыми протоколами, навыков сниффинга и т. д. будет слишком сложно.
Только если за деньги на фрилансе cyberforum.ru/freelance
Уже перевели, тебе осталось только использовать
http : // www .cyberforum.ru/csharp-beginners/thread871874.html
http : // www .cyberforum.ru/csharp-beginners/thread871874.html
Похожие вопросы
- Третий день ипусь над воздушным сопротивлением в Unity на C#. Кто силен? Помогите пожалуйста! (МНОГОБУКВ >>)
- C++ помогите пожалуйста! Без вашей помощи никак не получается
- Програмрование C# .Помогите пожалуйста решить задачу . Бьюсь головой об экран уже ...
- Программирование C# Помогите пожалуйста, кто понимает...
- Помогите пожалуйста перевести код с C++ в C#
- Помогите пожалуйста разобрать задачу по програмированию на C++.
- Помогите пожалуйста!Какое различие от ОЗУ и диска C или D ?
- здравствуйте, помогите пожалуйста, что не так вот c C++ кодом:
- Помогите пожалуйста перевести код программы с C++ на Си.
- Помогите пожалуйста решить на языке C++
очень выручили)))