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

Вниз

Сокеты "сдохли"   Найти похожие ветки 

 
Sergl   (2007-10-22 13:01) [0]

Запускаю сервер(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.



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


> Sergl   (22.10.07 13:01)


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


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


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


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


 
Sergl   (2007-10-22 13:22) [3]

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


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

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


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


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


а теперь


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


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


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

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


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


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


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


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

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

Строка

clientsocket1.Active:=false;

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


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


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


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

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

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


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

Хорошо.

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

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:59) [11]


> Сергей М. ©   (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 14:01) [12]


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


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


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

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


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


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

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


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

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


 
Sergl   (2007-10-22 14:14) [16]

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


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


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


Не понял ...

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


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


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


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


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

в смысле 10022


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


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

тестировал на одном компе.


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


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


Убрал. Все попрежнему...


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


> тестировал на одном компе


Даже если ты победишь эту ошибку, в "боевых" условиях твоя программа все равно работать как положено не будет.


 
Sergl   (2007-10-22 14:29) [22]


> Даже если ты победишь эту ошибку, в "боевых" условиях твоя
> программа все равно работать как положено не будет.


Но это ни суть важно, тот код который Вы давали(в 10м посту) он выдает ошибку на одной машине 10022, а на другой работает исправно...


 
Сергей М. ©   (2007-10-22 14:29) [23]


> Убрал.


Деинсталлировал ?


 
Sergl   (2007-10-22 14:34) [24]


> Деинсталлировал ?

Нет конечно)


 
Сергей М. ©   (2007-10-22 14:35) [25]


> Нет конечно)


Ну дык а что ж тогда хочешь ?)


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


> > Убрал.

Деинсталлировал ?

Удалил - прога все также не работает %)


 
Sergl   (2007-10-22 14:39) [27]

Кстати: сообщение об ошибке(10022) появлется два раза подряд...


 
Сергей М. ©   (2007-10-22 15:11) [28]

А событие OnClientDisconnect при этом ?


 
Sergl   (2007-10-22 15:19) [29]


> А событие OnClientDisconnect при этом ?

Я в обработчик события OnClientDisconnect написал showmeesage("disconnect").Появилось один раз.


 
Сергей М. ©   (2007-10-22 15:24) [30]

А что говорит OnError на клиенте ?


 
Sergl   (2007-10-22 15:33) [31]


> А что говорит OnError на клиенте ?


Написал в процедуре TForm1.clientsocket1Error - showmessage(inttostr(ErrorCode));
Молчит.

Написал в процедуре TForm1.serversocket1clientError - showmessage(inttostr(ErrorCode));
Тоже молчит.


 
Сергей М. ©   (2007-10-22 15:35) [32]

Фигня какая-то ...

Ну хорошо, а что говорит по этому поводу telnet ?


 
Sergl   (2007-10-22 15:38) [33]

Это как проверить? Ни разу не пользовался...


 
Сергей М. ©   (2007-10-22 15:48) [34]

загружаешь telnet.exe (Пуск -> Выполнить ..)

Пишешь "open 127.0.0.1 1111"<ENTER>

Жмешь Ctrl+[

Пишешь "close"<ENTER>

Что наблюдаешь ?


 
Сергей М. ©   (2007-10-22 15:49) [35]


> Жмешь Ctrl+[


Ctrl+]


 
Sergl   (2007-10-22 16:05) [36]

Спасибо. Ухожу домой, надеюсь завтра продолжим.


 
Sergl   (2007-10-23 08:45) [37]

Вообщем проблема решилась точкой отката в windows:)(после чего ошибка 10022 перестала появлятся) забавно... я кажется своей прогой повредил системную инфу)


 
Сергей М. ©   (2007-10-23 10:46) [38]


> я кажется своей прогой повредил системную инфу


Может и ты ... А может и Кошмарский)



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

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

Наверх




Память: 0.56 MB
Время: 0.015 c
15-1192133280
Eraser
2007-10-12 00:08
2007.11.18
Трансляции формулы 1


15-1192124189
Menel
2007-10-11 21:36
2007.11.18
Требуется совет по реализации


15-1192710762
Сатир
2007-10-18 16:32
2007.11.18
Загрузка модулей, которые содержать компоненты DevExpress


2-1193378132
cvg
2007-10-26 09:55
2007.11.18
Как обратиться к графику по имени?


2-1193111836
031178
2007-10-23 07:57
2007.11.18
Поиск в TreeView