Чуть не понятно о winsock на делфи

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by diznt, 2 Apr 2009.

  1. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    Мне в нем не понятно 2 вещи это:
    1-Как подключиться к хосту с помощью WinSock?
    Сначало без if'a можно? Или через if не возможно коннект установить? (да я знаю что if проверяет но многие пишут проверку а в итоге перед проверкой не стоит коннект с WinSock!)
    2-Как проверить что не удалось подкл к хосту?
     
  2. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Заполни sockaddr структуру и коннектись к хосту(это для POSIX сокетов хотя в wsa тоже самое, они на этих стандартах и построены)
    смотри что connect() вернет

    П.С. документации в инете море мог и не спрашивать, все довольно хорошо написано))
     
  3. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    razb без примеров я твои слова не могу разжувать
     
  4. Hellsp@wn

    Hellsp@wn Elder - Старейшина

    Joined:
    29 Apr 2007
    Messages:
    400
    Likes Received:
    153
    Reputations:
    48
    у тебя в голове каша, читай:

    http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1021
    http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1060
     
  5. diznt

    diznt Elder - Старейшина

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    Hellsp@wn спасибо огромное!
    почитаю обязательно
     
  6. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    diznt я же говорил инфи предостаточно)
     
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    блин, на самом ачате сотни тем в которых перетералось это.
    Code:
    var
    buf:array[0..1023] of char;
    WSData:TWSAData;  
    so:thandle; // дескриптор сокета
    ca:sockaddr_in; // для настройки коннекта
    begin
    write('[*] WSAStartup...');
    if WSAStartup($101, WSData)=-1 then // делаем инит сокетов
     begin
      write('ERROR');
      exit;
    end;
    writeln('OK');
    write('[*] Create Socket...');
    so:=socket(AF_INET, SOCK_STREAM, 0); // содаем сокет
    if so=-1 then
     begin
      writeln('ERROR');
      exit;
     end;
    writeln('OK');
    ca.sin_family:=AF_INET;
    ca.sin_port:=htons(80); // тут задаем порт
    ca.sin_addr.s_addr:=inet_addr('127.0.0.1'); // тут задаем IP адрес. Доменные имена незя, нуна резолвить
    write('[*] Connect to server...');
    if connect(so,ca,sizeof(ca))=-1 then // коннектимся 
     begin // если нет коннекта
      closesocket(so); // закрываем сокет
      writeln('ERROR');
      exit;
    end;
    writeln('OK');
    send(so,buf,sizeof(buf),0); // пишем данные
    recv(so,buf,sizeof(buf),0); // читаем данные
    closehandle(so); // закрываем сокет
    
    Примерно так всё выглядит )
     
  8. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Это не катит, там If-ы есть :D
     
  9. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 Algol
    Про cmp никто не говорил :p
    ret:=connect(...);
    asm
    cmp ret,0ffffffffh
    jne @@next1
    ret
    @@next1:
    end;