![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с TServerSocket [D6, Win95/98]
Igorek © (2003-10-03 11:45:00)
Только начинаю изучать эту тему, потому и глупый наверно вопрос.
Наваял сервер.
procedure TForm1.Button1Click(Sender: TObject);
begin
with ServerSocket1 do
begin
Active := not Active;
if Active then
Button1.Caption := "Set server not active"
else
Button1.Caption := "Set server active";
end;
Memo1.Lines.Clear;
Memo2.Lines.Clear;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;
procedure TForm1.ServerSocket1ClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;
При активации выдает:
---------------------------
Debugger Exception Notification
---------------------------
Project SampleServer.exe raised exception class ESocketError with message "Windows socket error: (11004), on API "ASync Lookup"". Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Причем ServerType = stNonBlocking
Самое интересное, что пару раз запустилось нормально а теперь - ексепшн. Что такое?
Digitman (2003-10-03 17:00:00) [1]
Specifies the name of the service for which the socket connection is used.
property Service: string;
Description
Use Service to identify the use of the connection. Windows provides a number of standard service names such as ftp, http, finger, and time. Servers can specify additional services and their associated ports in a SERVICES file. For more information, see the Microsoft documentation for Windows sockets.
Certain port numbers are reserved for specific values of service. Thus, Service provides a more meaningful way to specify the server Port to use for the socket connection. For server sockets, using Service rather than Port ensures that the server will listen for TCP/IP requests on the appropriate port.
так что серверу-клиенту твоим глубо начхать на св-во Port, они его возьмут из файла Services, коль скоро ты указала там "http"
Digitman (2003-10-03 16:55:00) [2]
угу ...
пусть будет)
тогда либо сервер у тебя должен "слушать" на 80-м порту, а не на 20000-м, либо строка соответствующая в файле Services должна указывать, что http-сервис по твоему необоснованному капризу отныне стал "жить" на 20000-м порту)
Igorek (2003-10-03 16:47:00) [3]
Хе. Убрал компонент, поставил снова, выставил свойства и все пошло. Странно однако...
> Digitman © (03.10.03 13:35) [5]
> для начала очисть св-во Service
Зачем, пусть будет напр. "http"
Digitman (2003-10-03 13:35:00) [4]
для начала очисть св-во Service
Igorek (2003-10-03 13:16:00) [5]
Active := not Active;
Digitman (2003-10-03 12:49:00) [6]
> Причина ошибки не в том
это понятно
приведенный код не имеет к этому отношения
> Ошибка присутствувет
какая ? вышеупомянутое исключение ?
ищи его источник с пом. меню "Search | Find Error ..."
> что за код 11004? МСДН нету под руками
зато есть хэлп sock2.hlp и модуль winsock.pas
WSABASEERR = 10000;
{ Valid name, no data record of requested type }
WSANO_DATA = (WSABASEERR+1004);
укажи строчку, при выполнении которой возникает ошибка 11004
Igorek (2003-10-03 12:27:00) [7]
2 Digitman
Причина ошибки не в том.
Пусть будет:
procedure TForm1.ServerSocket1ClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText("asdasda");
end;
Ошибка присутствувет. А что за код 11004? МСДН нету под руками.
Digitman (2003-10-03 12:10:00) [8]
procedure TForm1.ServerSocket1ClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendЧегоТо(....); // !!!!!!!!!!!
end;