Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Socket (https://forum.antichat.xyz/showthread.php?t=24193)

W!z@rD 19.09.2006 20:32

Socket
 
Компоненты для работы с сокетами... и есть ль !компонент! позволяющий переключить протокол Tcp/udp

DeRek-X 19.09.2006 21:57

такого и нету, да и нужен ли он ?
используй компоненты TclientSocket TServerSocket из dclsockets70.bpl (в 7 делфе)

W!z@rD 20.09.2006 09:55

неа... только на Winsock! позволяющий переключиться между UDP/TCP протоколом... т.е. 2 в 1....
и вот еще как в SocketUnit получить пакет на сервере (TServerSocket.Accept???! так?!)

DeRek-X 15.10.2006 00:16

в серваке типа TServerSocket есть событие OnClientRead
по этому событию
Код:

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
Begin
End;

напиши
Код:

s:=Socket.ReceiveText;
в s запишется принятый от клиента текст

я , наверное, не правильно понял, не текст, а файлик ты хочешь получить тогда так

клиент
должен
Код:

Form1.ClientSocket1.Socket.SendStream(fs_u);
где fs_u : TFileStream
выбранный файлик

сервак должен
в процедуре ServerSocket1ClientRead (см выше)
Код:

fs_u:=TFileStream.Create(Newdir+FileName,fmCreate);
    fs_u.Write(s[1], length(s));

здесь есть свои особенности, например, сначала пересылать объём файлика, потом принимать данные до тех пор пока не получим весь файлик, при этом, что бы данные не обрабатывались другими.

наоброт посылать файлик -- полностью аналогично

пиши на мыло
помогу

W!z@rD 15.10.2006 12:10

неа, не то....
дело в том что работа с сокетами осуществляется через dll
и должна быть возможность переключения между udp и tcp протоколом

da_ff 20.10.2006 23:38

Я правильно понял, ты хочешь менять протоколы на лету для одного и того же порта? На сколько я знаю это невозможно, отправить на tcp порт udp пакет...
Если же нет, используй два порта и библиотеку indy там все есть.
Хотя, если тебе не лень можешь подменить таблицу импорта для winsock.dll и перенаправлять такеты на разные порты фнутри функции. Можно создать видимость смены протоколов. Или же, другой вариант, подменить адреса векторов прерываний у сетевухи, и там уже отправлять что хочешь и куда хочешь, только я не уверен, что архитектура это позволит... Хотя будет интересно!

sn0w 25.10.2006 10:00

2da_ff: ахинея. кг/ам вообщем.

юз винапи, и не ипем мозг с компонентами, ибо кроме гимора и чужого подхода ничего не поимеем.

SOCKET socket(
int af,
int type,
int protocol
);

type= SOCK_STREAM (TCP)
type= SOCK_DGRAM (UDP)

+ немного добавлю: UDP в отличие от TCP не ведет контроля соединения, а просто отправляет сообщения (дейтаграммы).

gemaglabin 25.10.2006 12:26

Лучше не использовать такие гадости,как Indy и TClientSocket.

Код:

var Sock : integer;
begin Sock := Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

Код:

var Sock : integer;
begin  Sock := socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);


W!z@rD 25.10.2006 22:58

все...
/me теперь думает как все это на winsock организовать

da_ff 27.10.2006 22:13

Ту сноу! Нихера ни кг\ам. Это в нетленку. Я когда наутро это дело прочитал, сперва хотел потереть, но потом решил оставить.

Ту гемаглабину! Пользовать делфи и причетать на тяжесть конпонентов как-то странно. Я использую делфи когда нужно быстро получить результат. Если же задумываешься о размерах и быстродействии связка С+ВИН АПИ то, что доктор прописал!


Время: 23:01