Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.13;
Скачать: CL | DM;

Вниз

Народ, помогите, плиз! Сокет глючит!   Найти похожие ветки 

 
IDKFA   (2002-11-13 15:29) [0]

Вообщем так - все хорошо до тех пор, пока я не начинаю коннектиться к сокету, далее:

if (такого не существует) then
прога вместо сообщения и нормального выхода просто зависает
else {если существует}
begin
if (порт=21) then {то есть порт FTP}
все OK(получаем данные)
else
прога просто опять зависает
end;
То есть получается, что нормальная работа только по порту FTP, в остальных случаях прога повисает!!! Подскажите, плиз, чё не так делаю?

Вот код unitа:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, WinSock;

type
TForm1 = class(TForm)
EHost: TEdit;
Label1: TLabel;
EPort13: TEdit;
Label2: TLabel;
EPort37: TEdit;
Label3: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

const
port1 = 13;
port2 = 37;

function RetIP(host2dotted:string):string; {возвращает IP по DNS}
var ConnectionArray:sockaddr_in;
host_struct:PHostEnt;
remote_host:string;
begin
host_struct:=GetHostByName(PChar(host2dotted));
result:="";
remote_host:="";
if (host_struct<>nil) then
begin
with ConnectionArray.Sin_addr, host_struct^ do
begin
S_un_b.s_b1 := h_addr^[0];
S_un_b.s_b2 := h_addr^[1];
S_un_b.s_b3 := h_addr^[2];
S_un_b.s_b4 := h_addr^[3];
remote_host:=IntToStr(Ord(S_un_b.s_b1))+"."+
IntToStr(Ord(S_un_b.s_b2))+"."+
IntToStr(Ord(S_un_b.s_b3))+"."+
IntToStr(Ord(S_un_b.s_b4));
end;
Result:=remote_host;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var wVersionRequested:word;
D:WSAData;
S:TSocket;
A:Sockaddr_in;
Addr:LongInt;
Error:Integer;
Con:Integer;
IPStr,Time:string;
Info:array[1..100] of Char;
begin
wVersionRequested:=makeword(2,0);
Error:=WSAStartup(wVersionRequested,D);
if (Error<>0) then
begin
EHost.Text:="Ошибка в WinSock!";
Exit;
end;
S:=socket(AF_INET, SOCK_STREAM, 0);
if (S=INVALID_SOCKET) then
begin
EHost.Text:="Невозможно создать сокет!";
Exit;
end;

A.sin_family:=AF_INET;
A.sin_port:=htons(21);

Addr:=inet_addr(PChar(EHost.Text));
if(Addr<>INADDR_NONE)then
begin
A.sin_addr.S_addr:=Addr;
end else
begin
IPStr:=RetIP(EHost.Text);
if (IPStr<>"") then
begin
A.sin_addr.S_addr:=inet_addr(PChar(IPStr));
end else
begin
EHost.Text:="Невозможно найти хост!";
end;
end;

Con:=connect(S,A,SizeOf(A));
if (Con=INVALID_SOCKET) then
begin
EHost.Text:="Невозможно подключиться к сокету!";
Exit;
end;
FillMemory(@Info,SizeOf(Info),0);
Con:=recv(S,Info,SizeOf(Info),0);
if (Con=SOCKET_ERROR) then
begin
EHost.Text:="Невозможно считать из сокета!";
Exit;
end else
begin
showmessage(Info);{просто смотрю, чё пришло}
end;

WSACleanUp;
end;

end.


Помогите, плиз, дело горит!!!


 
Smithson   (2002-11-13 15:49) [1]

Что значит - прога зависает? Пройди отладчиком и увидишь причину и следствия.


 
IDKFA   (2002-11-13 18:40) [2]


...
Con:=connect(S,A,SizeOf(A)); {Если сокет не существует то здесь виснет}
if (Con=INVALID_SOCKET) then
begin
EHost.Text:="Невозможно подключиться к сокету!";
Exit;
end;
FillMemory(@Info,SizeOf(Info),0);
Con:=recv(S,Info,SizeOf(Info),0);{Если сокет существует, но не 21, то здесь виснет}
if (Con=SOCKET_ERROR) then
begin
EHost.Text:="Невозможно считать из сокета!";



Страницы: 1 вся ветка

Текущий архив: 2003.01.13;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.008 c
8-37221
Blacker77
2002-09-21 19:02
2003.01.13
Опять долбаный MP3!


1-37054
tupoy
2003-01-02 22:54
2003.01.13
Шифрование


1-37109
FoXx
2003-01-03 20:23
2003.01.13
KeyLoger


7-37415
Berser
2002-10-30 01:02
2003.01.13
HASP - как с ним работать, или как обойти


14-37328
Ее звали Мечтой
2002-12-22 22:48
2003.01.13
Какой Кошмар...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский