Показать сообщение отдельно

  #2  
Старый 24.12.2009, 15:17
wolmer
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
С нами: 8947056

Репутация: 229
По умолчанию

Цитата:
Сообщение от TrueBit  
Пытаюсь разобраться в winsock.
Возникла такая проблемка
есть кусок кода:
PHP код:
addr.sin_family:=AF_Inet;    
addr.sin_port:=htons(80);   
addr.sin_addr.S_addr:=inet_addr('127.0.0.1');
Err(Connect(S,addr,SizeOf(TSockAddr))); 
этот код работает когда на одном ip один сайт,
а как быть если на одном ip не один сайт?
ведь при заходе на этот ip на сайт не попадаешь
Во первых, мы соед. с сервером но не с сайтом, т.е. производится функция коннекта к серверу (а именно к порту сервера)(но не к сайту), к примеру мы приконнектились и хотим чтобы сервер нам выдал содержимое определенной страницы (в html виде естественно ), определенного сайта.
Тогда пишем так (я забежал чуть вперед чтобы было понятно):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 sock:tsocket;
 addr:sockaddr_in;

 sendstring:string;
 sendbuffer, recvbuffer:array [0..4095] of char;

 dsize:dword;
begin
 sock:=socket(af_inet, SOCK_STREAM, 0); //Указываем что хотим работать с TCP
 addr.sin_family:=af_inet;
 addr.sin_addr.S_addr:=inet_addr('81.177.9.119');//Ip тачки где расположен сайт gamecs.net
 addr.sin_port:=htons(80);
 if connect(sock, addr, sizeof(addr))=0 then //В случае если успешно подкл. к порту то...
  begin
    Showmessage('Соед. есть! Посылаем данные');
    sendstring:='GET http://gamecs.net/forum/index.php? HTTP/1.0'+#13#10+
                //Говорим мол нам нужна страница broadcast.xml
//Тут даем знать серверу какой нам нужен сайт
'User-Agent: Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.20'+#13#10+
'Host: gamecs.net'+#13#10+
'Cookie: pass_hash=aa1b56893b171c26e306a653c4074af1; session_id=6535fe43f9b89af027382d5c00ff2790; __utma=172773923.'+
'2094703955.1261652832.1261652832.1261652832.1; __utmb=142773923; __utmc=142773923; __utmz=142773923.1261652832.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10;
    CopyMemory(@sendbuffer, pchar(sendstring), length(sendstring));
    send(sock, sendbuffer, sizeof(sendbuffer), 0);

    repeat
      dsize:=recv(sock, recvbuffer, 4095, 0);
      memo1.lines.text:=memo1.lines.text+recvbuffer;
    until (dSize = 0) or (dSize = SOCKET_ERROR);
    //Принимаем полный HTML пакет
    //Правда там всякая фигня в конец дописывается но лень сейчас дореализовывать этот момент
  end
 else
  begin
    Showmessage('Соед. нету!');
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 ws:wsadata;
begin
 WSAStartup($101, ws);
end;
Если что не понятно -> спрашивай
(у gamecs.net тоже есть соседнии сайты)
 
Ответить с цитированием