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

<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

谢谢


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

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


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

大家说是这样么?


mark


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

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


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值