![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
передача текста [D7, WinXP]
Dot © (2005-11-12 00:58:00)Уважаемые Мастера.
помогите пожалуйста студенту кодом.
как на (c) конкретный(ого) IP послать/принять простой текст?
С использованием winsock.
Инициализация сокета мне уже известн, сам механизм приема/отправки нет =(
atruhin (2005-11-15 14:51:00) [1]А еще почитать о значении возвращаемом send и recv, а то двойку получишь.
Digitman (2005-11-15 10:25:00) [2]http://book.itep.ru/7/sock_71.htm
читать про ф-цию accept() до полного просветления
Delphi_is_cool (2005-11-14 00:14:00) [3]Dot >
Оставь e-mail, могу помочь исходниками.
Dot (2005-11-13 11:39:00) [4]Немного додумал сам однако остается вне грани моего понимания следующее.
Итак вот клиент.
-----------------
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;
---------------
Постоянно вылазает сообщение Ошибка при получении!
Dot (2005-11-13 10:21:00) [5]Delphi (12.11.05 12:22) [3]
Спасибо. Но если можно полностью код приведи пожалуйста, с инициализацией сокета.
Delphi (2005-11-12 12:22:00) [6]Примерно так:
Послать:
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-12 01:33:00) [7]спасибо за совет. но я не по своей воле же делаю. Лабы в универе
Eraser (2005-11-12 01:11:00) [8]
> Dot (12.11.05 00:58)
Советую использовать готовые решения, типа Indy. Отпавку текста там можно организовать в 3 команды, а приём в 1.