2013-03-16 104 views
0

下面的VB脚本可以用Javascript来打开IP钱箱吗?Winsock.SendData等效于Javascript?

Private Sub CashDrawerConnect_Click() 
    Winsock1.Close 
    ipaddr = "192.168.2.5" 
    Winsock1.RemoteHost = ipaddr 
    Winsock1.RemotePort = 30998 
    Winsock1.Connect 
    Sleep 250 
    TxtOpStatus = "Connection to the cash drawer at " & ipaddr & " is established..." 
    TxtOpStatus.Refresh 
End Sub 
Private Sub CashDrawerOpen_Click() 
    If Winsock1.State = sckConnected Then 
    Winsock1.SendData "opendrawer\0a" 
    Else 
    TxtOpStatus = "Not connected to the device" 
    TxtOpStatus.Refresh 
    End If 
End Sub 

回答

1

你可以在javascript上做,但不能在浏览器上运行。

您需要安装nodejs并直接从控制台运行您的js文件。

这是一个会连接你的抽屉和你的榜样发送“opendrawer”命令的一个小例子:

var net = require('net'); 
var client = net.connect({port: 30998, host: "yourip"}, function() { 
    client.write("opendrawer\0a"); 
}); 

但是,如果服务器可以访问抽屉中的JavaScript代码可以只让一个请求服务器负责打开与抽屉的连接并发送有效载荷(opendrawer)。

如果你使用php,你可以看看sockets documentation

+0

您可以从.NET运行JavaScript(JScript) – 2013-03-16 00:56:16

+0

嗯......实际上我想从iPad上的网络应用程序运行这个功能,所以我猜Javascript已经不存在了。如果在本地网络上有一台php服务器,可以通过php来完成吗? – 2013-03-16 00:59:51

+0

@JasonWood是的,你可以这样做,我编辑了我的答案来反映这一点。 – albertein 2013-03-16 01:04:46

0

使用VB和JavaScript的调用大多是相同的,你只是要适应它的语言。 http://www.ostrosoft.com/oswinsck/oswinsck_javascript.asp

下面是使用WinSock从JScript中

var oWinsock; 
var sServer = "192.168.2.5"; 
var nPort = 3098; 
var bClose = false; 

oWinsock = new ActiveXObject("OSWINSCK.Winsock"); 
// Hooking up handlers 
WScript.ConnectObject(oWinsock, "oWinsock_"); 
oWinsock.Connect(sServer, nPort); 
WScript.Echo("Invalid URL"); 
bClose = true; 

function oWinsock_OnConnect() { 
    oWinsock.SendData('Your data'); 
} 

function oWinsock_OnDataArrival(bytesTotal) { 
    var sBuffer = oWinsock.GetDataBuffer(); 
    sSource = sSource + sBuffer; 
} 

function oWinsock_OnError(Number, Description, Scode, Source, 
    HelpFile, HelpContext, CancelDisplay) { 
    WScript.Echo(Number + ': ' + Description); 
} 

function oWinsock_OnClose() { 
    oWinsock.CloseWinsock(); 
    WScript.Echo(sSource); 

    oWinsock = null; 
    bClose = true; 
} 

while (!bClose) { 
    WScript.Sleep(1); 
} 

在浏览器中的一个片段?不是,但你可以使用WebSockets http://en.wikipedia.org/wiki/WebSocket

你需要实现一个WebSocket服务器,所以如果你需要直接与套接字通话,你不能从浏览器中完成。但是你可以实现一个在套接字服务器和WebSocket服务器之间传递信息的代理服务器。

如果您不需要双向沟通,最好的办法是让您的服务器提供一个包装该套接字请求的web服务。然后你的客户可以只做一个AJAX调用。

+0

网络套接字不是原始的tcp套接字,它们是遵循websocket协议的tcp套接字,所以它们没有用于将它们连接到不会说websocket的东西,比如现金抽屉 – albertein 2013-03-16 01:03:19

+0

@albertein您需要编写代理websocket服务器,如我所说 – 2013-03-16 01:05:12