[Delphi5] Socket Errors bij versturen van record

Pagina: 1
Acties:

  • BM
  • Registratie: September 2001
  • Laatst online: 19:57

BM

Admin Softe Goederen
Topicstarter
Goeienavond allen,

ik zit met het volgende probleem.
Ik ben bezig met een (simpel) progje om winamp te bedienen enzo, dit lukt allemaal wel. Nu wilde ik (just for fun) dit uibreiden met een mogelijkheid om via internet of een netwerk winamp te bedienen. So far so good.
Simpele commando's gaan goed (stuur een string, en aan de hand daarvan laar ik opdracht uitvoeren).
Nu wil ik echter gegevens van het nummer wat nu speelt doorsturen naar het "remote control" progje.
Maak dus een record type aan waar ik die gegevens inzet:
code:
1
2
3
4
5
6
7
8
9
10
11
type
  SongInfo = record
    Song: String[200];
    Length: String[10];
    Pos: String[10];
    State: String[10];
    Brate: String[4];
    SRate: String[4];
    Chan: String[4];
    PlayPos: String[20];
  end;

Die verstuur ik met de volgende code:
code:
1
  ClientSocket1.Socket.SendBuf(info,sizeof(info));

ontvangen op deze manier:
code:
1
2
3
4
5
6
7
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var info:SongInfo;
begin
  ServerSocket1.Socket.ReceiveBuf(info, sizeof(info));
  [...haal info uit record en doe er wat mee...]
end;

Als ik dit run, krijg ik de volgende errors:
Op het winamp control progsel:
als 1e: Asynchronous Socket Error 10054
als 2e: Windows Socket Error (10054), on API 'send'

Op het "remote control" progje:
Windows Socket Error (10057), on API 'recv'

Ik d8 dat de code redelijk klopte (niet dus).
Ik connect dat remote ding, daar bepaal ik het ip adres van, en leg ik een verbinding terug, dus elk progje een server en een client socket.

Hoop dat jullie er een beetje wijs uit kunnen, ik zelf word er een beetje gek van :'(

Xbox
Even the dark has a silver lining


Verwijderd

Gebruik Socket ipv ServerSocket1.Socket, dus
code:
1
2
3
4
5
6
7
8
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var 
  info:SongInfo;
begin
  Socket.ReceiveBuf(info, sizeof(info));
  [...haal info uit record en doe er wat mee...]
end;

  • BM
  • Registratie: September 2001
  • Laatst online: 19:57

BM

Admin Softe Goederen
Topicstarter
Thanks, errors zijn nu voor zover ik getest heb weg.
Alleen 1 probleempje, ik krijg volgens mij maar een gedeelte van alle strings in dat record goed door.
zie dit plaatje: http://www27.brinkster.com/paniceagle/weird.jpg
Sommige gegegevens komen scrammbled door, en sommige helemaal niet. Alleen 1e komt goed door. Zou het kunnen dat record te groot is om te versturen ofzo :?

edit:

damn brinkster, ff link van plaatje in adresbalk slepen, anders doet ie het niet :(

Xbox
Even the dark has a silver lining


Verwijderd

Kijk voor het verzenden, wat je in de var. 'info' hebt gezet; dus zet de inhoud op het scherm, net zoals je bij de Server doet.

Het kan geloof ik wel zijn dat je niet alles ontvangt, controleer dit dmv:
code:
1
2
3
4
5
6
7
8
9
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var 
  info:SongInfo;
begin
  if Socket.ReceiveBuf(info, sizeof(info)) <> SizeOf(Info) then
    ShowMessage('Te weinig/veel ontvangen');
  [...haal info uit record en doe er wat mee...]
end;

  • BM
  • Registratie: September 2001
  • Laatst online: 19:57

BM

Admin Softe Goederen
Topicstarter
Doet het nu goed, heb alles wat ik niet ECHT nodig vond weggelaten (nog 4 dingen over), en nu komt alles netjes over :)

Zal later wel eens kijken of ik dat nog kan uibreiden.

Xbox
Even the dark has a silver lining