Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
ВнизСокеты "сдохли" Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.052 c