Главная страница
    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.47 MB
Время: 0.009 c
10-1121901725
nippo
2005-07-21 03:22
2006.07.16
Значение property COM-сервера


1-1149138873
KygECHuK
2006-06-01 09:14
2006.07.16
Проблемы с SW_SYSCOMMAND


2-1151248740
b.o.n.d.007
2006-06-25 19:19
2006.07.16
TChart


2-1151295732
Urvin
2006-06-26 08:22
2006.07.16
Canvas как параметр


15-1150295327
AlexanderMS
2006-06-14 18:28
2006.07.16
Пожалуйста, проверьте перевод...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский