![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сокеты "сдохли" [D7, WinXP]
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)
Какие обработчики каких событий сервера и клиента тобой используются при этом ?