[c#]Отправка stream через сокет

Для тех, кто хочет сделать мир лучше.
Ответить
Сообщение
Автор
Аватара пользователя
Megalan
Разработчик
Разработчик
Сообщения: 335
Зарегистрирован: 02.04.2007
Благодарил (а): 1 раз
Поблагодарили: 29 раз
Контактная информация:

#1 Сообщение 25.08.2008, 20:21

Имеется stream с данными вида

Код: Выделить всё

            
using (BinaryWriter bw = new BinaryWriter(stream, Encoding.UTF8))
            {
                bw.Write(protocolSignature);
                bw.Write(reportsize);
                bw.Write((byte)MessageType.CompundMessage);
                bw.Write((UInt32)CompoundMessageFlags.None);
                bw.Write(this.Text);
                bw.Write(Application.ProductVersion);
                bw.Write(".zip");
                bw.Write("[email protected]");
                byte[] reportData = new byte[1024];
                ......
                bw.Write(reportData);
}
необходимо это каким то образом отправить через сокеты, есть предложения?
ps в сокетах я почти не разбираюсь

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#2 Сообщение 29.08.2008, 18:14

Megalan писал(а):Имеется stream с данными вида

Код: Выделить всё

            
using (BinaryWriter bw = new BinaryWriter(stream, Encoding.UTF8))
            {
                bw.Write(protocolSignature);
                bw.Write(reportsize);
                bw.Write((byte)MessageType.CompundMessage);
                bw.Write((UInt32)CompoundMessageFlags.None);
                bw.Write(this.Text);
                bw.Write(Application.ProductVersion);
                bw.Write(".zip");
                bw.Write("[email protected]");
                byte[] reportData = new byte[1024];
                ......
                bw.Write(reportData);
}
необходимо это каким то образом отправить через сокеты, есть предложения?
ps в сокетах я почти не разбираюсь
Сам я тоже не сильно разбираюсь, но:

Код: Выделить всё

var Sock: TSocket;
D: TWDAData;
begin
  d:=WDAStartup(..);
  Sock:=Connect(...);

  if send(Sock, '.zip', length('.zip'))-SOCKET_ERROR then
    result:=false;
//и тд.
end;
Код конечно на Дельфи, да и не помню я одну переменную (TWDAData - примерно так в оригинале и звучет).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Dark Daskin
Сержант
Сержант
Сообщения: 71
Зарегистрирован: 07.12.2007
Откуда: Санкт-Петербург
Контактная информация:

#3 Сообщение 02.09.2008, 21:20

В общем случае так:

Код: Выделить всё

System.Net.Sockets.Socket socket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
socket.Connect("example.com", 80);
System.Net.Sockets.NetworkStream stream = new System.Net.Sockets.NetworkStream(socket);
//Твой код здесь
socket.Close();
╔════════════════════════════╗
║  Скачать все GCF: BitTorrent | HTTP
╚════════════════════════════╝
H4sICCl+V0gAAAALMOEyM1YwMeL6wcfwgIFFrlZBgJGBQV7RUXFO4oU+lQWOSkETDTpVFtQqX/po0y+v4Kwk1GjUyaLorNiTcKcPqJ4BAhhx0uxQmgNCW5yzPPOCmdNQRdOlyYOh01PlpUufH3N/paqmyyRPlk5Hi2cWfX7OnYYKINUODIwKMHMI0IxqLDJPXU4xMirKK0110WJkfK6yaGrOE0ZGTSAdCuSry8s8dnkFVM/C0MjAAKbbcJrnAKENFRgZJNUlLxgBaVVNlQksQFox02YOB4i/UmGSMEjefsYcZSDNINDAwKAA1w8AJT7WI1kBAAA=
Изображение

Ambient
Нович0к
Нович0к
Сообщения: 7
Зарегистрирован: 17.04.2008

#4 Сообщение 20.10.2008, 01:48

Dark Daskin писал(а):В общем случае так:
Угу. По сути дела, BinaryWriter нужен на входе объект любого класса, унаследованного от Stream. Хотя я бы вместо Socket использовал TcpClient.

Ответить