Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
7-37396
Azbul
2002-11-01 17:58
2003.01.13
такая проблема (+)


1-37138
Yurko
2002-12-29 03:22
2003.01.13
IconChange


6-37231
PKT
2002-11-11 10:36
2003.01.13
Трехуровневое приложение. Очень простое


7-37403
shef
2002-10-31 17:50
2003.01.13
потоки в делфи


3-36964
Сергей
2002-12-18 11:28
2003.01.13
Dataset





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский