Текущий архив: 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.008 c