关键词搜索

源码搜索 ×
×

[VB.NET]询异步socket通信完善的例子.

发布2021-02-10浏览419次

详情内容

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

    询异步socket通信完善的例子.
    我最近试着用异步写,但是发现收到的开头丢掉了一些,不知道我代码哪点的原因.

    我基本上是如下思路. 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
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    谢谢


    http://www.codeproject.com/useritems/winsock2005.asp

    参考这个,我觉得这个做的很好,完全的事件驱动


    我看了些别人的代码,发现我不vb.net教程应该把beginReceive写在一个循环里,而是在一次beginReceive中触发的回调函数中再beginReceive一下,如此反复,做到持续接收数据。

    大家说是这样么?


    mark


    我发现,我这样做后,就是 在一次beginReceive中触发的回调函数中再beginReceive一下,如此反复,做到持续接收数据,但我一直设的buffer是1024,所以第一次触发的时候,buffer全是0,

    没办法,我现在设buffer为1,就是一次接收一个字节,目前试了几次,发现接收数据还行.


    我上面给了个例子给你,怎么就不去看看别人怎么写的呢?

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载