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

Вниз

Сокеты без окон   Найти похожие ветки 

 
Aven   (2006-03-02 22:55) [0]

Как можно использовать сокеты без создания окна? т.е. нужно принимать события сокетов в консольной проге.. а создавать окно очень не хочется.Знаю это возможно, но мож кто-то знает как?


 
Rouse_ ©   (2006-03-03 00:40) [1]

select


 
Aven   (2006-03-03 01:28) [2]

А кусок кода можно? По хелпу ничего не понял :(


 
ZzzzZ   (2006-03-03 07:13) [3]

Эвенты юзай, хорошаю штука, простая.
Иди на мсдн, там все прояснится.


 
Сергей М. ©   (2006-03-03 11:01) [4]


> создавать окно очень не хочется


В смысле лень создавать его "ручками" ? Или по каким-то другим причинам ?


 
Slym ©   (2006-03-03 14:53) [5]

TServerSocket + ThreadBlocking


 
Aven   (2006-03-03 16:43) [6]

Сергей М. программа консольная, не каких окон там не должно быть по причине запуска оной через wine под linux в консоли.

Slym что-то я сомневаюсь что это без окон....


 
umbra ©   (2006-03-03 17:16) [7]

а разве wine не поддерживает окон?


 
XProger ©   (2006-03-03 17:52) [8]

http://xproger.mirgames.ru/?id=2&page=1#XiRC
Консольное приложение, работа с TCP сокетом реализована в отдельном потоке.


 
Aven   (2006-03-03 23:15) [9]

umbra из консоли запустится только консольное :) Если создается окно, то ошибка :) Из графич. оболочки, запишется.

XProger пасиб, прикольный сайт, много интересного нашел... вот только там TCP клиент, а не сервер... :(


 
Delphi_is_cool ©   (2006-03-04 12:11) [10]

Кусочек кода из одной моей программы:

program Project2;

{$APPTYPE CONSOLE}

uses
 Windows, WinSock, SysUtils;

function WaitForRead(Socket: TSocket; const Timeout: Word = 500) : Boolean;
var
 TV: TTimeVal;
 FSet: TFDSet;
begin
 ZeroMemory(@FSet, SizeOf(TFDSet));
 FD_SET(Socket, FSet);
 TV.tv_sec := 0;
 TV.tv_usec := Timeout;
 Result := Select(0, @FSet, nil, nil, @TV) = 1;
end;

function RecvLength(Socket: TSocket) : LongInt;
begin
 IoCtlSocket(Socket, FIONREAD, Result);
end;

procedure ThreadProc(Socket: TSocket); stdcall;
begin
 while True do
   if WaitForRead(Socket) then
     if RecvLength(Socket) = 0 then
        CloseSocket(Socket) // Клиент отключился
     else begin
       // Пришли какието данные
     end;
end;

function CreateServer : TSocket;
var
 addr: sockaddr_in;
 ServerReady: Boolean;
begin
 Result := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 if Result <> INVALID_SOCKET then
 begin
   ZeroMemory(@addr, SizeOf(sockaddr_in));
   with addr do
   begin
     sin_family      := AF_INET;
     sin_port        := htons(12345);
     sin_addr.S_addr := INADDR_ANY;
   end;

   ServerReady := (Bind(Result, addr, SizeOf(sockaddr_in)) <> SOCKET_ERROR) and (Listen(Result, SOMAXCONN) <> SOCKET_ERROR);
   if not ServerReady then
   begin
     CloseSocket(Result);
     Result := INVALID_SOCKET;
   end;
 end;
end;

var
 C: Cardinal;
 WSAData: TWSAData;
 ServerSocket: TSocket;
begin
 if WSAStartup($0101, WSAData) = 0 then
 begin
   ServerSocket := CreateServer;
   if ServerSocket <> INVALID_SOCKET then
   begin
     while True do
       CloseHandle(CreateThread(nil, 0, @ThreadProc, Pointer(Accept(ServerSocket, nil, nil)), 0, C));

     CloseSocket(ServerSocket);
   end;
   WSACleanup;
 end;
end.

Надёсь поможет :)


 
Сергей М. ©   (2006-03-06 08:12) [11]


> не каких окон там не должно быть по причине запуска оной
> через wine под linux в консоли


С каких пор wine перестал эмулировать оконные ф-ции win32 ?


 
umbra ©   (2006-03-06 10:20) [12]

если окна недопустимы, то используйте блокирующие сокеты - Indy. Помещайте компоненты в DataModule (это не окно) и делайте все, что Вам нужно.


 
злыдень   (2006-03-08 17:30) [13]

<offtop>
XProger ©   (03.03.06 17:52) [8]
ты в RFC по IRC-протоколу + в доки по mIRC заглядывать не пробовал? #31 не ХЗ, а Underline =) и еще много спорных моментов :)
</offtop>



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

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

Наверх




Память: 0.49 MB
Время: 0.032 c
4-1144230639
AlexeyT
2006-04-05 13:50
2006.07.16
Как определить отключенный сетевой диск?


15-1150356104
Yeg
2006-06-15 11:21
2006.07.16
Хостинг


15-1150722901
lookin
2006-06-19 17:15
2006.07.16
Защита интеллектуальной собственности...


9-1131908625
Conferno
2005-11-13 22:03
2006.07.16
GLScene - GLPortal и GLFreeForm


6-1141732535
AllBrain
2006-03-07 14:55
2006.07.16
Помогите The memory could not be "read".