Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.02.2010, 19:00
UltraBloxX UltraBloxX вне форума
Новичок
 
Регистрация: 13.05.2009
Сообщения: 66
Репутация: 10
По умолчанию Не работают сокеты

Вообщем пробую сделать приложение клиент-сервер в Delphi 2009 на сокетах, тестирую на локалхосте. Клиент с сервером соединяется, а при попытке послать текст (как клиент -> сервер так и наоборот) приходит пустая строка. Что не так?
Ответить с цитированием
  #2  
Старый 21.02.2010, 19:03
Аватар для Ultras
Ultras Ultras вне форума
Начинающий
 
Регистрация: 09.02.2010
Адрес: Россия / Ставрополь
Сообщения: 138
Репутация: 475
По умолчанию

покажи процедуры отправки-получения текста
Ответить с цитированием
  #3  
Старый 21.02.2010, 19:07
UltraBloxX UltraBloxX вне форума
Новичок
 
Регистрация: 13.05.2009
Сообщения: 66
Репутация: 10
По умолчанию

Код:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
if Socket.ReceiveText = '12' then ShowMessage('Test Command Arrived')
else
begin
ShowMessage('Arrived data: ' + Socket.ReceiveText);
ClientSocket1.Socket.SendText('Error!');
end;
end;

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
test: string;
begin
if ServerSocket1.Socket.Connected = true then
begin
test := '12';
ServerSocket1.Socket.Connections[0].SendText(test);
end
else
ShowMessage('No connection...');
end;

На клиентсокет приходит строка '?'#0

Последний раз редактировалось UltraBloxX, 21.02.2010 в 19:17.
Ответить с цитированием
  #4  
Старый 21.02.2010, 19:15
Аватар для Ultras
Ultras Ultras вне форума
Начинающий
 
Регистрация: 09.02.2010
Адрес: Россия / Ставрополь
Сообщения: 138
Репутация: 475
По умолчанию

а где ServerSocket1.Active := True; и ClientSocket1.Open?

на клиентской стороне:
Код:
  ClientSocket1.Open;
  ClientSocket1.Socket.SendText('test');
  ClientSocket1.Close;

на серверной:
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ShowMessage(Socket.ReceiveText);
end;
и чтобы в ServerSocket1.Active было True;

Последний раз редактировалось Ultras, 21.02.2010 в 19:19.
Ответить с цитированием
  #5  
Старый 21.02.2010, 19:25
UltraBloxX UltraBloxX вне форума
Новичок
 
Регистрация: 13.05.2009
Сообщения: 66
Репутация: 10
По умолчанию

Да, Open не было. Но сейчас оба сокета активны и открыты а строка всё равно не приходит...
Ответить с цитированием
  #6  
Старый 21.02.2010, 19:25
Аватар для Ultras
Ultras Ultras вне форума
Начинающий
 
Регистрация: 09.02.2010
Адрес: Россия / Ставрополь
Сообщения: 138
Репутация: 475
По умолчанию

попробуй сделать вначале как я показал, будет работать или нет...
Ответить с цитированием
  #7  
Старый 21.02.2010, 19:56
UltraBloxX UltraBloxX вне форума
Новичок
 
Регистрация: 13.05.2009
Сообщения: 66
Репутация: 10
По умолчанию

А теперь четыре квадратика приходят.
Ответить с цитированием
  #8  
Старый 21.02.2010, 20:16
Аватар для Ultras
Ultras Ultras вне форума
Начинающий
 
Регистрация: 09.02.2010
Адрес: Россия / Ставрополь
Сообщения: 138
Репутация: 475
По умолчанию

а ClientSocket в каком режиме стоит:
ClientType = ctBlocking или ctNonBlocking? (поставьте в ctBlocking)
Ответить с цитированием
  #9  
Старый 21.02.2010, 20:52
UltraBloxX UltraBloxX вне форума
Новичок
 
Регистрация: 13.05.2009
Сообщения: 66
Репутация: 10
По умолчанию

ctBlocking не работает.
Ответить с цитированием
  #10  
Старый 21.02.2010, 20:56
Аватар для Ultras
Ultras Ultras вне форума
Начинающий
 
Регистрация: 09.02.2010
Адрес: Россия / Ставрополь
Сообщения: 138
Репутация: 475
По умолчанию

ой, извеняюсь ctNonBlocking нужно должно работать, если не решите до завтра проблему, прошу в аську: 418018483
Ответить с цитированием
  #11  
Старый 21.02.2010, 20:57
UltraBloxX UltraBloxX вне форума
Новичок
 
Регистрация: 13.05.2009
Сообщения: 66
Репутация: 10
По умолчанию

А, ну у меня ctNonBlocking и было.
Ответить с цитированием
  #12  
Старый 21.02.2010, 21:03
UltraBloxX UltraBloxX вне форума
Новичок
 
Регистрация: 13.05.2009
Сообщения: 66
Репутация: 10
По умолчанию

Сейчас изменил процедуру так:

Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
tst: ansistring;
  begin
tst := Socket.ReceiveText;
ShowMessage(tst);
end;

Теперь в Ansistring приходит текст "????" (вместо квадратиков)
Ответить с цитированием
  #13  
Старый 21.02.2010, 21:04
Аватар для Ultras
Ultras Ultras вне форума
Начинающий
 
Регистрация: 09.02.2010
Адрес: Россия / Ставрополь
Сообщения: 138
Репутация: 475
По умолчанию

попробуй tst сделать типа PChar
Ответить с цитированием
  #14  
Старый 21.02.2010, 21:30
UltraBloxX UltraBloxX вне форума
Новичок
 
Регистрация: 13.05.2009
Сообщения: 66
Репутация: 10
По умолчанию

Вообщем проблема решилась похоже. Дело было в том, что в ScktComp юните Delphi 2009 отправляется AnsiString, а принимается String (Юникод). Из-за этого приходили сообщения некорректно. Я взял ScktComp.pas, заменил в нём обьявления функции приёма текста и подложил его в папку клиенту и серверу. Уже проверил, клиент сообщил что тестовая команда получена.
Ответить с цитированием
  #15  
Старый 21.02.2010, 22:03
Аватар для Ultras
Ultras Ultras вне форума
Начинающий
 
Регистрация: 09.02.2010
Адрес: Россия / Ставрополь
Сообщения: 138
Репутация: 475
По умолчанию

будем знать на будущее
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter