Autor Beitrag
sk0r
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: So 20.05.07 18:34 
Hi,

ich wollte mal zum test ohne eine TCPClient komponente was machen
Leider bekomme ich immer fehler wenn ich etwas an jemanden
senden will. Send() und SendTo() funktionieren nicht.

Wenn ich SendTo() ohne connect() verwende bekomme ich 1411 "Klasse ist nicht vorhanden"
was mir aber gar nichts sagt.

Wenn ich Send() mit connect() benutze bekomme ich 10004 "Ein Blockierungsvorgang
wurde durch einen Aufruf von WSACancelBlockingCall unterbrochen"

Ich würde aber selbst gerne lieber SendTo benutzen.

naja leider funktioniert beides nicht und desshalb hoffe ich auf Hilfe Sad

ausblenden volle Höhe Delphi-Quelltext
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:
procedure TForm1.FormCreate(Sender: TObject);
var
  TWSASocket: TWSADATA;
  WinSck: TSOCKET;
  TAddr: SockAddr_In;
  GetHost: PHOSTENT;
  SendBuf: array[0..1024of char;
  BufLength: Integer;
  pIpAddr: PChar;
begin
  BufLength := 1024;
  pIpAddr := '72.14.221.104';
  WSAStartup($0101, TWSASocket);
  WinSck := Socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

  if WinSck = INVALID_SOCKET then
  begin
    showmessage('Socket could not be created. ');
    WSACleanUp();
    CloseSocket(WinSck);
    ExitProcess(0);
  end;
  if SetSockOpt(WinSck, IPPROTO_IP, IP_HDRINCL, 'l'4) <> 0 then
  begin
    showmessage('Error');
    WSACleanUp();
    CloseSocket(WinSck);
    ExitProcess(0);
  end;

  //GetHost := GetHostByName(pIpAddr);
  TAddr.sin_family := AF_INET;
  TAddr.sin_port := htons(27015);
  TAddr.sin_addr.S_addr := inet_addr(pIpAddr);

  //if connect(WinSck, @TAddr, sizeof(TAddr)) = SOCKET_ERROR then showmessage('FU!');
  //Send(WinSck, SendBuf, BufLength, 0);
  if SendTo(WinSck, SendBuf, BufLength, 0, TAddr, sizeof(TAddr)) = SOCKET_ERROR then showmessage('error!');
  showmessage(SysErrorMessage(WSAGetLastError) + ' ' + inttostr(WSAGetLastError));
  WSACleanUp();
  CloseSocket(WinSck);
end;


MfG: sk0r

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 20.05.07 22:37 
Moin!

Was auch immer du da tust... :nixweiss: :gruebel:

Schau mal auf user profile iconLuckie´s Homepage, er hat da auch eine WSA-API-Demo. Wenn du damit auch nicht vorwärts kommst, dann würde ich dir dringend raten die Finger von der WSA-API zu lassen und einen Wrapper zu nehmen! :mahn: :?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
sk0r Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Mo 21.05.07 10:21 
user profile iconNarses hat folgendes geschrieben:
Moin!

Was auch immer du da tust... :nixweiss: :gruebel:

Schau mal auf user profile iconLuckie´s Homepage, er hat da auch eine WSA-API-Demo. Wenn du damit auch nicht vorwärts kommst, dann würde ich dir dringend raten die Finger von der WSA-API zu lassen und einen Wrapper zu nehmen! :mahn: :?

cu
Narses


Naja, normalerweise benutze ich ja die VCL, aber ich wollte es mal so probieren.

Ich habe auch schon einen Beispielcode aufm Rechner, dort tritt der Fehler allerdings auch auf.

Leider kann ich das Beispiel von Luckie auf seiner Homepage nicht finden :(