Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
2-1151366523
fantasy
2006-06-27 04:02
2006.07.16
RaveReport


15-1150208840
SergProger
2006-06-13 18:27
2006.07.16
Строка в PHP


3-1147432339
Ломброзо
2006-05-12 15:12
2006.07.16
Битовые операции в Oracle


8-1138977807
maximmsm
2006-02-03 17:43
2006.07.16
Как вытащить информацию из EXIF?


6-1142314044
Oops
2006-03-14 08:27
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский