小编W01*_*W01的帖子

通过LISP USOCKET接收数据

我正在尝试通过USOCKET发送数据.当数据到达服务器时,服务器应该回复.但是,stream-read(如下定义)仅在数据与其发送的原始数据一起回显时返回数据.例如,如果我发送hello并且服务器回复相同的数据,hellostream-read返回,但如果服务器回复hi,stream-read则在服务器发送它收到的确切缓冲区之前不会返回.

这是代码:(我在网上找到了大部分代码.)

;; Load USocket
(load #P"/usr/share/common-lisp/source/cl-asdf/asdf.lisp")      
(asdf:operate 'asdf:load-op :usocket)

(defun stream-read (stream)
  (socket-listen (usocket:socket-stream stream)))

(defun stream-print (string stream)
  (write-line string (usocket:socket-stream stream))
  (force-output (usocket:socket-stream stream)))

;; Define a stream
(defparameter my-stream
  (usocket:socket-connect "127.0.0.1" 6003))

;; Use the stream
(stream-print "random" my-stream)
(print (stream-read my-stream))
Run Code Online (Sandbox Code Playgroud)

至于服务器,我使用了一个略微修改版本的boost阻塞服务器示例.(c ++)完整的代码可以在这里找到:http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/echo/blocking_tcp_echo_server.cpp

...

void session(socket_ptr sock)
{
   try
   {    
    for (;;)
    {
      char data[max_length];

      boost::system::error_code error;
      size_t …
Run Code Online (Sandbox Code Playgroud)

sockets networking tcp common-lisp usocket

5
推荐指数
1
解决办法
1741
查看次数

标签 统计

common-lisp ×1

networking ×1

sockets ×1

tcp ×1

usocket ×1