Посмотрите в чем может быть проблема? По нажатию кнопки Button1 создается сокет, потом настраиваю адрес и пытаюсь провести коннект. Коннекта нет.... Хотя сервер на другой стороне ждет и слушает порт, всё нормуль. Для проверки добавил в каждую строчку GetLastError. Первые два раза выдает "0", а потом "5". Что за ошибка №5 и воообще откуда она может взяться???? Кстати, если вместо connect сделать bind, listen и поменять порт, то всё ок и приложение вешается слушать порт. Что за фигня??
| Код |
unit ClientMain; interface uses Windows, Classes, Graphics, Forms, Controls, Menus, Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ImgList, StdActns, ActnList, ToolWin, WinSock, MySocket, SysUtils; type TMainForm = class(TForm) DataMemo: TMemo; SendButton: TButton; SendMessage: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; Sock:TSocket; Addr:TSockAddr; Data:TWSAData; Cnt,Flags:Cardinal; implementation uses about; {$R *.dfm} procedure TMainForm.Button1Click(Sender: TObject); begin WSAStartup($0101,Data); MainForm.DataMemo.Lines.Add(InttoStr(GetLastError)); Sock:=Socket(AF_Inet,Sock_Stream,0); MainForm.DataMemo.Lines.Add(InttoStr(GetLastError)); Addr.sin_family:=AF_Inet; MainForm.DataMemo.Lines.Add(InttoStr(GetLastError)); Addr.sin_port:=HToNS(3031); MainForm.DataMemo.Lines.Add(InttoStr(GetLastError)); Addr.sin_addr.S_addr:=Inet_Addr('127.0.0.1'); MainForm.DataMemo.Lines.Add(InttoStr(GetLastError)); FillChar(Addr.Sin_Zero,SizeOf(Addr.Sin_Zero),0); MainForm.DataMemo.Lines.Add(InttoStr(GetLastError)); if Connect(Sock,Addr,SizeOf(Addr))= 0 then MainForm.DataMemo.Lines.Add('Соединение успешно установлено!!!') else MainForm.DataMemo.Lines.Add('Соединение установить не удалось (('); MainForm.DataMemo.Lines.Add(InttoStr(WSAGetLastError)); // end; end.
|
|