Форум: "Сети";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Внизпередача текста Найти похожие ветки
← →
Dot (2005-11-12 00:58) [0]Уважаемые Мастера.
помогите пожалуйста студенту кодом.
как на (c) конкретный(ого) IP послать/принять простой текст?
С использованием winsock.
Инициализация сокета мне уже известн, сам механизм приема/отправки нет =(
← →
Eraser © (2005-11-12 01:11) [1]
> Dot (12.11.05 00:58)
Советую использовать готовые решения, типа Indy. Отпавку текста там можно организовать в 3 команды, а приём в 1.
← →
Dot (2005-11-12 01:33) [2]спасибо за совет. но я не по своей воле же делаю. Лабы в универе
← →
Delphi (2005-11-12 12:22) [3]Примерно так:
Послать:
const
S: String = "Text message !";
begin
if Send(My_Socket, PChar( S )^, Length(S), 0) = SOCKET_ERROR then
ShowMessage("Ошибка при отправке !");
Принять:
var
Buf: array [0..4096] of Char;
begin
if Recv(My_Socket, Buf, SizeOf(Buf), 0) = SOCKET_ERROR then
ShowMessage("Ошибка при получении !")
else
ShowMessage(Buf);
← →
Dot (2005-11-13 10:21) [4]Delphi (12.11.05 12:22) [3]
Спасибо. Но если можно полностью код приведи пожалуйста, с инициализацией сокета.
← →
Dot (2005-11-13 11:39) [5]Немного додумал сам однако остается вне грани моего понимания следующее.
Итак вот клиент.
-----------------
var
Sock: TSocket;
procedure TForm1.Button1Click(Sender: TObject);
var
WSAData: TWSAData;
Addr: sockaddr_in;
begin
WSAStartup( $0101, WSAData );
Sock := Socket( PF_INET, SOCK_STREAM, IPPROTO_IP );
with Addr do
begin
sin_family := PF_INET;
sin_port := htons( 12345 );
sin_addr.S_addr := inet_addr( "127.0.0.1" );
end;
if Connect( Sock, Addr, SizeOf( Addr ) ) = SOCKET_ERROR then
Button2.Click;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
CloseSocket( Sock );
WSACleanup;
Form1.Close;
end;
procedure TForm1.Button3Click(Sender: TObject);
const
S: String = "Text message !";
begin
if Send(Sock, PChar( S )^, Length(S), 0) = SOCKET_ERROR then
ShowMessage("Ошибка при отправке !");
end;
-----------------
Все отсылает нормально исправно
Теперь вопрос про сервер.
Как организовать цикл, дабы он слушал порт и в случае если клиент ему что то послал то выводил посланное на экран.
ибо
---------------
procedure TForm1.Button1Click(Sender: TObject);
var
WSAData: TWSAData;
Buf: array [0..4096] of Char;
Addr: sockaddr_in;
i: integer;
begin
WSAStartup( $0101, WSAData );
Sock := Socket( PF_INET, SOCK_STREAM, IPPROTO_IP );
i:=1;
with Addr do
begin
sin_family := PF_INET;
sin_port := htons( 12345 );
sin_addr.S_addr := INADDR_ANY;
end;
Bind( Sock, Addr, SizeOf( Addr ) );
Listen( Sock, SOMAXCONN );
if Recv(Sock, Buf, SizeOf(Buf), 0) = SOCKET_ERROR then
ShowMessage("Ошибка при получении !")
else
ShowMessage(Buf);
end;
---------------
Постоянно вылазает сообщение Ошибка при получении!
← →
Delphi_is_cool © (2005-11-14 00:14) [6]Dot >
Оставь e-mail, могу помочь исходниками.
← →
Digitman © (2005-11-15 10:25) [7]http://book.itep.ru/7/sock_71.htm
читать про ф-цию accept() до полного просветления
← →
atruhin © (2005-11-15 14:51) [8]А еще почитать о значении возвращаемом send и recv, а то двойку получишь.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c