1

Тема: VBScript: Не могу послать данные в порт через WinSock

Может быть кто сталкивался с проблемой:
Пытаюсь послать данные на порт удаленного компа. Порт открывается, читать оттуда можно (GetData), а на SendData выдает ошибку - Объект не поддерживает это свойство или метод: 'tcpClient.SendData'. FireWall отключен.

Фрагмент кода:

Set tcpClient=WScript.CreateObject("MSWinsock.Winsock") 
WScript.ConnectObject tcpClient,"tcpClient_" 
tcpClient.Protocol = sckTCPProtocol 
tcpClient.RemoteHost = "192.168.1.1" 
tcpClient.RemotePort = 9005 
tcpClient.Connect 
 
start_time = second(Now) 
Do While (tcpClient.State <> sckConnected) or (second(Now) >= start_time+3) 
  WScript.Echo "open port..." 
  WScript.Sleep 500 
Loop 
 
if not bConnected Then 
  WScript.Echo "timeout" 
  WScript.Quit 
Else 
  tcpClient.SendData("li:2:10000016:") 
end If

test_port.vbs(18, 3) Ошибка выполнения Microsoft VBScript: Объект не поддерживает это свойство или метод: 'tcpClient.SendData'

2

Re: VBScript: Не могу послать данные в порт через WinSock

Попробуй убрать скобки у метода SendData

3

Re: VBScript: Не могу послать данные в порт через WinSock

VSVLAD пишет:

Попробуй убрать скобки у метода SendData

Не помогло.

4

Re: VBScript: Не могу послать данные в порт через WinSock

dandyd, указывайте префикс языка в заголовке темы. Я добавил.

Используйте тэг «code» для оформления кода на форуме. Я поправил.

Пишите предложения с заглавной буквы и используйте знаки препинания. Я исправил.

В будущем делайте сие сами.

5 (изменено: VSVLAD, 2011-02-20 18:44:06)

Re: VBScript: Не могу послать данные в порт через WinSock

У меня ошибок нет, поставил вместо IP адрес яндекса и порт сменил. Плюс по коду:
1) bConnected чему равна?
2) Константы не определены в коде?

6 (изменено: dandyd, 2011-02-20 19:30:51)

Re: VBScript: Не могу послать данные в порт через WinSock

VSVLAD пишет:

У меня ошибок нет, поставил вместо IP адрес яндекса и порт сменил. Плюс по коду:
1) bConnected чему равна?
2) Константы не определены в коде?

Sub Winsock_Connect
  bConnected=true
End Sub

Soket.dll от http://tech.dimac.net/ почему-то работает. Но мне с ней не очень удобно получается - там нет события Winsock_DataArrival, просто функция GetLine.
А мне кроме всего прочего раз в 10 сек. надо слать команду, чтобы эта железяка не отваливалась по своему таймауту.
В стандартном WinSock я сижу в цикле и через Wscript.Sleep 9000 посылаю команду (полылал бы - но на SendData почему-то ругается).

Сейчас работает так:

Set oSocket = CreateObject("Socket.TCP")
oSocket.Host = "192.168.1.1:9005"
oSocket.Open
While not oSocket.Connected
  WScript.Echo "open port"
Wend

sl("li:2:10000016:")
sl("tm:a:")

tt=Timer
While True
  WScript.Sleep 100
  If oSocket.BytesInBuffer > 0 Then ' если есть данные в буфере, читаем строку
    in_Str = oSocket.GetLine
    if InStr(in_Str,"ka:") = 0 Then ' выводим строку, если она не "ka:"
      WScript.Echo in_Str
     end if
  Else
    If Timer >= tt+10 Then ' если насчитали 10 сек, шлем "ka:"
      sl("ka:")
      tt=Timer
    End if
  End If
Wend

'***************************
Function sl(ln)
oSocket.SendLine ln
End Function