我正在尝试通过USOCKET发送数据.当数据到达服务器时,服务器应该回复.但是,stream-read
(如下定义)仅在数据与其发送的原始数据一起回显时返回数据.例如,如果我发送hello
并且服务器回复相同的数据,hello
则stream-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)