Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

передача текста [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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо