Конференция ".Net" » как передать через соккет рекорд
 
  • Rule © (17.11.06 12:11) [0]
    вот нада одной посылкой передать через сокет рекорд
    ...
    Client:=Socket.Create
    ...
     SendStr = record
      Typ  : char;
      Bcode : array [1..BCodeLength] of char;
      Name : array [1..NameLength] of char;
      Kol  : array [1..KolLenght] of char;
     end;
    ...

    Var Buffer: SendStr;

    Все там позаполнял и пытаюсь спихнуть:
        Client.Send(@Buffer, SendByte, SocketFlags.None);

    Без @ матюкается на тип. С @ говорит, код опасный, ну да хрен с ним, убедил компилятор. Теперь компилится, но один фиг ничего не отсылает, а вылетает...

        ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project Project1.exe encountered unhandled exception class System.ArgumentException with message 'Object contains non-primitive or non-blittable data.'.

    в дотнете делаю первые шаги, надеюсь и последние ...
    помогите пожалуйста ...
  • clickmaker © (17.11.06 12:57) [1]
    на шарпе я бы попробовал так

    SendStr str;
    IntPtr ptr;
    Socket Client = new Socket(AddressFamily.InterNetwork, SocketType.Seqpacket, ProtocolType.IP);
    byte[] buf = new byte[System.Runtime.InteropServices.Marshal.SizeOf(str)];

    System.Runtime.InteropServices.Marshal.StructureToPtr( str, ptr, false);
    System.Runtime.InteropServices.Marshal.Copy( ptr, buf, 0, buf.Length);
    Client.Send(buf, 0, buf.Length, SocketFlags.None);
  • Rule © (17.11.06 13:08) [2]
    clickmaker ©   (17.11.06 12:57) [1]
    спасибо огромное, попробую
  • Rule © (17.11.06 13:40) [3]
    Debugger Exception Notification
    Project Project1.exe encountered unhandled exception class System.ArgumentException with message 'The specified structure must be blittable or have layout information.'.
  • Rule © (17.11.06 13:41) [4]
    вот такое вот теперь выпадает
  • clickmaker © (17.11.06 14:20) [5]
    <StructLayout(LayoutKind.Sequential)>
    public struct...

    помогает?
  • Rule © (17.11.06 15:04) [6]
    clickmaker ©   (17.11.06 14:20) [5]
    <StructLayout(LayoutKind.Sequential)>
    public struct...

    ухты а куда это вставить ?
  • clickmaker © (17.11.06 15:11) [7]

    > ухты а куда это вставить ?

    чессно гря, не знаю, как это в паскалевском .Нете будет выглядеть. А Дельфи студии нету. В хелпе должно быть.
    ну то есть перед рекордом указать layout как-то.
    В дотнете так обычно апишные структуры портируют, чтобы ф-ии АПИ можно было дергать, unmanaged-код то бишь
  • Rule © (17.11.06 15:13) [8]
    clickmaker ©   (17.11.06 15:11) [7]
    понял ща буду пробовать
  • Algol (17.11.06 17:51) [9]

    >  Client.Send(@Buffer, SendByte, SocketFlags.None);


    Хм. А вообще-то в дотнете принято сериализовать объект перед тем как передавать. Как ты интересно собираешся принимать его?
 
Конференция ".Net" » как передать через соккет рекорд
Есть новые Нет новых   [134430   +2][b:0][p:0]