之前以为LiveCode不支持socket通信,后来仔细在网上搜索了一下发现还是可以的,而且在官网的语法说明里也找到了相关的命令,地址在这里:
http://livecode.com/developers/api/6.0.2/command/put/
这里面应该囊括了所有LiveCode的指令(command),是我们学习语法攻略,遇到不懂的语法都可以来这里查一下。
怎样在LiveCode中利用socket进行通信
什么是socket?这里我就不再解释了
在LiveCode中使用socket进行通信——服务器端
在LiveCode中使用socket是十分简单的。首先我们来看一下服务器的实现原理:服务器必须监听某个指定端口上的客户端的连接请求,为了实现监听,我们用下面的指令就够了:
accept connections on port 1234 with message "clientConnected"
这样,我们的服务器就会监听1234端口上所有客户端的连接请求。当有一个客户端连接上来之后,"clientConnected"信号将会被发送出去,用以处理这个新的连接。之后就可以利用这个新的连接来接收、发送信息给对应的客户端了。
on clientConnected pSocket
read from socket pSocket with message "messageReceived"
end clientConnected
上面的例子中,服务器是处在非阻塞模式下的。那就意味着每一次的read操作都会立即退出。当有从客户端发送来的数据时, "messageReceived"信号将会被发送,对应着将会有一个处理函数来处理这个连接(存在变量it里)和发送过来的数据。还有一种处理方法是阻塞模式,即省略略“with message”关键字,这时read操作将一直阻塞到有数据到来才返回。当数据被接收后,read操作返回,数据被存放到变量it中。
有一个附加的参数可以传递给read操作,指明需要读取多少数据。可以是字符数、行数(或者其他更大的单位——5行)或读到指定的字符才返回。
按照我们前面讲过的,现在服务器处于非阻塞模式。当有数据从客户端到来时,"messageReceived"信号将会产生。与此同时,服务器可以给客户端一个回应,例子中我们只是简单的把收到的数据回写给客户端了。
on messageReceived pSocket, pMsg
write pMsg to socket pSocket
read from socket pSocket with message "messageReceived"
end messageReceived
和read类似,write命令也有阻塞和非阻塞模式之分。如果我们想用非阻塞模式,我们只要简单的指定write结束后发送什么信号就可以了(with message "messageReceived")。为了保证继续收取客户端的消息,我们又添加了一条read操作。
当服务器端不想继续和客户端交互的时候,就可以简单的关闭掉当前的连接(close socket tSocket)。当客户端主动断开连接的时候,服务器端会收到一条socketClosed消息,用来处理断开的连接。
在LiveCode中使用socket进行通信——客户端
在客户端使用socket通信也是很简单的,首先也是要打开一条socket:
open socket to "host:port" with message "clientConnected"
像read、write命令一样,open指令的参数也是可选的,用以区分阻塞或者非阻塞模式。如果用的是阻塞模式,一旦连接建立,就会通过it变量返回当前的连接。在非阻塞模式,它将会以参数的模式传递给回调函数。
如果在连接服务器的过程中出错,"socketError"信号将会产生(如果错误是由寻找指定主机失败导致,错误信息将会记录在变量result中,而不会产生"socketError"信号。)
以上open操作在非阻塞模式下工作,当socket建立后我们可以通过这个连接向服务器发送消息,并接收服务器的回应。
on clientConnected pSocket
write "hello" & return to socket pSocket
read from socket sSocket until return
put it
close socket pSocket
end clientConnected
原文链接:
如果本贴对你有用,请留个言让我知道,谢谢!