您的位置:程序门 -> .net技术 -> vb.net



询异步socket通信完善的例子.


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


询异步socket通信完善的例子.[已结贴,结贴人:itcoco]
发表于: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
 

 
谢谢
发表于:2007-03-30 13:15:221楼 得分:15
http://www.codeproject.com/useritems/winsock2005.asp

参考这个,我觉得这个做的很好,完全的事件驱动
发表于:2007-04-01 22:57:012楼 得分:0
我看了些别人的代码,发现我不应该把beginreceive写在一个循环里,而是在一次beginreceive中触发的回调函数中再beginreceive一下,如此反复,做到持续接收数据。

大家说是这样么?
发表于:2007-04-02 07:45:213楼 得分:15
mark
发表于:2007-04-02 16:21:554楼 得分:0
我发现,我这样做后,就是   在一次beginreceive中触发的回调函数中再beginreceive一下,如此反复,做到持续接收数据,但我一直设的buffer是1024,所以第一次触发的时候,buffer全是0,

没办法,我现在设buffer为1,就是一次接收一个字节,目前试了几次,发现接收数据还行.
发表于:2007-04-14 16:57:505楼 得分:0
我上面给了个例子给你,怎么就不去看看别人怎么写的呢?


快速检索

最新资讯
热门点击