Вниз
Скачать: CL | DM;

передача текста   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.035 c
8-1126933826
Xerx
2005-09-17 09:10
2006.02.26
Быстрый вывод треугольника


15-1139037393
Репортер
2006-02-04 10:16
2006.02.26
Вывод графики и текста


8-1127143353
Dem0n[74]
2005-09-19 19:22
2006.02.26
Форматы аудио


5-1126019073
TStas
2005-09-06 19:04
2006.02.26
Что такое out of bound и как с ним бороться?


2-1139412356
ListBox
2006-02-08 18:25
2006.02.26
Как узнать сколько строк помещается в ListBox без прокрутки?




   Наверх