| 发表于:2007-03-30 09:20:19 楼主 |
我最近试着用异步写,但是发现收到的开头丢掉了一些,不知道我代码哪点的原因. 我基本上是如下思路. server是java写的,我主要用vb.net写client端. 先是form_load的时候,socket.connect,并且启动receive的一个线程和处理数据的线城.窗体出来后,点按钮,向server发送用户名,,登陆服务器,然后服务器返回信息. receive的线程中代码主要如下: while true try mysocket.beginreceive(ss.mybuffer, 0, ss.mybuffer.length, socketflags.none, new asynccallback(addressof putsockbuffer), ss) receivethread.sleep(50) catch ex as exception system.console.writeline(ex.message) end try end while 回调函数主要代码如下 try if ar.iscompleted then ss = ctype(ar.asyncstate, socketstate) '收到的bytes内容 system.console.writeline(encoding.getencoding( "gb2312 ").getstring(ss.mybuffer)) try bufferubound = socket_buffer.getupperbound(0) catch ex as exception bufferubound = -1 end try bytesrec = ss.mybuffer.length if bufferubound < 0 then redim socket_buffer(bytesrec - 1) system.array.copy(ss.mybuffer, 0, socket_buffer, 0, bytesrec) else redim preserve socket_buffer(bytesrec + bufferubound) system.array.copy(ss.mybuffer, 0, socket_buffer, bufferubound + 1, bytesrec) end if system.console.writeline(encoding.getencoding( "gb2312 ").getstring(socket_buffer)) end if catch ex as exception system.console.writeline(ex.message) end try 谢谢 |
|
|
|
|