|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
будем знать на будущее
|