![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Вообщем пробую сделать приложение клиент-сервер в Delphi 2009 на сокетах, тестирую на локалхосте. Клиент с сервером соединяется, а при попытке послать текст (как клиент -> сервер так и наоборот) приходит пустая строка. Что не так?
|
|
#2
|
||||
|
||||
|
покажи процедуры отправки-получения текста
|
|
#3
|
|||
|
|||
|
Код:
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
|
||||
|
||||
|
а где 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; Последний раз редактировалось Ultras, 21.02.2010 в 19:19. |
|
#5
|
|||
|
|||
|
Да, Open не было. Но сейчас оба сокета активны и открыты а строка всё равно не приходит...
|
|
#6
|
||||
|
||||
|
попробуй сделать вначале как я показал, будет работать или нет...
|
|
#7
|
|||
|
|||
|
А теперь четыре квадратика приходят.
|
|
#8
|
||||
|
||||
|
а ClientSocket в каком режиме стоит:
ClientType = ctBlocking или ctNonBlocking? (поставьте в ctBlocking) |
|
#9
|
|||
|
|||
|
ctBlocking не работает.
|
|
#10
|
||||
|
||||
|
ой, извеняюсь ctNonBlocking нужно
должно работать, если не решите до завтра проблему, прошу в аську: 418018483 |
|
#11
|
|||
|
|||
|
А, ну у меня ctNonBlocking и было.
|
|
#12
|
|||
|
|||
|
Сейчас изменил процедуру так:
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var tst: ansistring; begin tst := Socket.ReceiveText; ShowMessage(tst); end; Теперь в Ansistring приходит текст "????" (вместо квадратиков) |
|
#13
|
||||
|
||||
|
попробуй tst сделать типа PChar
|
|
#14
|
|||
|
|||
|
Вообщем проблема решилась похоже. Дело было в том, что в ScktComp юните Delphi 2009 отправляется AnsiString, а принимается String (Юникод). Из-за этого приходили сообщения некорректно. Я взял ScktComp.pas, заменил в нём обьявления функции приёма текста и подложил его в папку клиенту и серверу. Уже проверил, клиент сообщил что тестовая команда получена.
|
|
#15
|
||||
|
||||
|
будем знать на будущее
![]() |