Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сокеты "сдохли" [D7, WinXP]


Страницы:   1 2

Sergl ©   (2007-10-22 13:01:00) 

Запускаю сервер(button1). Запускаю клиент(button2). Когда нажимаю на кнопку button4 повляется ошибка: "Windows socket error: An invalid argument was supplied(10022), on API 'closesocket' " Что случилось? Ведь еще вчера работало???

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   ClientSocket1: TClientSocket;
   ServerSocket1: TServerSocket;
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Button4: TButton;
   Label1: TLabel;
   Label2: TLabel;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure Button4Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
serversocket1.Active:=false;
serversocket1.Port:=1111;
serversocket1.Active:=true;
label1.Caption:='Сервер запущен(порт:1111)';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
clientsocket1.Active:=false;
clientsocket1.Port:=1111;
clientsocket1.Address:='127.0.0.1';
clientsocket1.Active:=true;
label2.caption:='Клиент запущен(127.0.0.1:1111)';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
label1.Caption:='Сервер не запущен';
serversocket1.Active:=false;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
label2.Caption:='Клиент не запущен';
clientsocket1.Active:=false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
label1.Caption:='Сервер не запущен';
label2.Caption:='Клиент не запущен';
end;

end.


Sergl   (2007-10-22 14:20:00) [21]


>  опять таже ошибка ...

в смысле 10022


Сергей М.   (2007-10-22 14:20:00) [22]


> Где его там в свойствах найти можно?


Не понял ...

Как же ты "отправлял файлы по сети", если не можешь найти ни одного сет.подключения в Окружении ?


> Я вообщем в Касперском его разорвал


Убирай нафих этого Кошмарского - он еще и не такую свинью может подложить.


Sergl   (2007-10-22 14:14:00) [23]

Где его там в свойствах найти можно? Я вообщем в Касперском его разорвал, возникла ошибка 10053, затем нажимаю на кнопку button2(соединение установил) и после button4 - опять таже ошибка ...


Сергей М.   (2007-10-22 14:06:00) [24]

Попробуй снести в свойствах сет. окружения данное сетевое подключение и установить его заново


Sergl   (2007-10-22 14:01:00) [25]


> Сергей М. ©   (22.10.07 14:01) [12]
> > потом вылет с ошибкойС той же самой, т.е. 10022 при closesocket
> ?

Да, с ней же...


Sergl   (2007-10-22 14:01:00) [26]

На другой машине все 4е вижу? ПАРАДОКС:)


Сергей М.   (2007-10-22 14:01:00) [27]


> потом вылет с ошибкой


С той же самой, т.е. 10022 при closesocket ?


Sergl   (2007-10-22 13:59:00) [28]


> Сергей М. ©   (22.10.07 13:50) [10]
> Хорошо.Пробуй такой код:procedure TForm1.Button1Click(Sender:
>  TObject);beginserversocket1.Port :=1111;serversocket1.Active:
> =true;ShowMessage('Сервер успешно активирован');clientsocket.
> Port := 1111;clientsocket.Address := '127.0.0.1';clientsocket.
> Open;while not clientsocket.Active do Application.ProcessMessages;
> ShowMessage('Клиент успешно подключился');clientsocket.Close;
> ShowMessage('Клиент успешно отключился');serversocket1.Active:
> =False;ShowMessage('Сервер успешно деактивирован');end;Какие
> сообщения видишь ?


Мне пожалуй нужно писать clientsocket1 а не clientsocket.

Вижу первые два сообщения и потом вылет с ошибкой...


Сергей М.   (2007-10-22 13:50:00) [29]

Хорошо.

Пробуй такой код:

procedure TForm1.Button1Click(Sender: TObject);
begin

serversocket1.Port :=1111;
serversocket1.Active:=true;
ShowMessage('Сервер успешно активирован');

clientsocket.Port := 1111;
clientsocket.Address := '127.0.0.1';
clientsocket.Open;
while not clientsocket.Active do Application.ProcessMessages;
ShowMessage('Клиент успешно подключился');

clientsocket.Close;
ShowMessage('Клиент успешно отключился');

serversocket1.Active:=False;
ShowMessage('Сервер успешно деактивирован');

end;


Какие сообщения видишь ?


Sergl   (2007-10-22 13:40:00) [30]


> Значит ты вводишь в заблуждение.Строка clientsocket1.Active:
> =false;не может вызвать ошибку с кодом 10022


Я вот и сам ничего не понимаю.... работало же....

Вообще тестировалось приложение побольше: отправлялись файлы по сети и т.д. Все шло не плохо и в один момент при разрыве соединения с сервером начала появлятся Данная ошибка(триллер какой-то получается). Я написал код для проверки разрыва(который дал выше) и ошибка повторилась....

Может я своим приложением чего-то повредил???фунции API??? Сам понимаю что это бред какой-то!


Сергей М.   (2007-10-22 13:36:00) [31]

Значит ты вводишь в заблуждение.

Строка

clientsocket1.Active:=false;

не может вызвать ошибку с кодом 10022


Sergl   (2007-10-22 13:30:00) [32]


> Сергей М. ©   (22.10.07 13:22) [4]
> переведи clientsocket в режим ctBlocking и удивись.


Перевел... таже ошибка...


Sergl   (2007-10-22 13:25:00) [33]

Извеняюсь!!! Первый раз было правильно! Button4


Сергей М.   (2007-10-22 13:23:00) [34]


> нажимаю на кнопку button 4повляется ошибка


а теперь


> нажимаю на button 3: выдается ошибка


Как это понимать ?


Сергей М.   (2007-10-22 13:22:00) [35]

переведи clientsocket в режим ctBlocking и удивись.


Sergl   (2007-10-22 13:22:00) [36]

Это код работал у меня еще вчера. Причем этот же код работает сейчас на другой машине!


Sergl   (2007-10-22 13:18:00) [37]


> Какие обработчики каких событий сервера и клиента тобой
> используются при этом ?


Я дал весь код... ни чего другого я не использую....
Делаю так:
1. нажал на button1: произошло соединение с сервером
2. нажал на button2: произошло подсоедининие клиента к серверу
3. нажимаю на button3: выдается ошибка: "Windows socket error: An invalid argument was supplied(10022), on API 'closesocket' "


Сергей М.   (2007-10-22 13:06:00) [38]


> Sergl   (22.10.07 13:01)


Какие обработчики каких событий сервера и клиента тобой используются при этом ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо