放分!! + .NET Socket 编程简单例子!! 不来的吃亏了别怪我!

sumtec 2002-05-09 04:57:21
加精
比较完整的代码片断:
(只包括服务端的打开操作,不包括关闭,也不包括客户端)
(还有,这个是根据我的一个程序改编的,如有错误,可能是改的时候改错了,跟我说一声,我再来看看)

Imports System.Net
Imports System.Net.Sockets

Public Class Form1
Private mListener As Socket
Protected mSocks As New ArrayList()
Protected DataBuff(1048576) As Byte

... '其它代码

Sub New()
...
InitListener()
End Sub

... '其它代码

Protected Overridable Sub InitListener()
mListener = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
With mListener
.Bind(New IPEndPoint(IPAddress.Parse(ServIP), ServPort))
.Listen(40)
.BeginAccept(AddressOf Accepted, mListener)
End With
End Sub

Protected Overridable Sub Accepted(ByVal ar As IAsyncResult)
Dim tmp As Socket()
tmp = mListener.EndAccept(ar)
mSocks.Add(tmp)
tmp.BeginReceive(DataBuff, 0, 4, SocketFlags.None, AddressOf Received, mListener)
mListener.BeginAccept(AddressOf Accepted, mListener)
End Sub

Protected Overridable Sub Received(ByVal ar As IAsyncResult)
Dim i As Integer
Dim j As Integer
Dim tmp As Socket

tmp = CType(ar.AsyncState, Socket)

If tmp Is Nothing Then Return
If JoinBag(tmp) = False Then Return ' 为了安全,传送数据时第一个4 Bytes
' 用于指出本次传送有多少Bytes的数据
' 对此,用JoinBag(tmp As Socket) 函数保证数据的完整
' 调用完该函数时数据已经全部接收完毕,可以对接收的数据进行操作。

... '数据处理


tmp.BeginReceive(DataBuff, 0, 4, SocketFlags.None, AddressOf Received, mReceived_AsyncResult)
' 继续等待接收下一组数据
End Sub

Protected Overridable Function JoinBag(ByVal Sock As Socket) As Boolean
Dim ReceivedLength, BagLength As Integer

With Sock
ReceivedLength = .EndReceive(Sock)
If ReceivedLength = 0 Then '接收到0长度的数据包!非法!
.Close()
Return False
End If

BagLength = ConvToInt(DataBuff, 0)
If BagLength > DataBuff.Length Then
ReDim Preserve DataBuff(BagLength)
End If
Do Until ReceivedLength >= BagLength
ReceivedLength += .Receive(DataBuff, ReceivedLength, BagLength - ReceivedLength, SocketFlags.None)
Loop
End With
Return True
End Function

Public Function ConvToInt(ByVal Arr() As Byte, ByRef StartsAt As Integer) As Integer
Dim i As Integer, l As Integer
l = 0
For i = StartsAt + 3 To StartsAt Step -1
l *= 256
l += Arr(i)
Next
StartsAt += 4
Return CInt(l And &HFFFFFFFF)
End Function

... '其它代码

End Class
...全文
80 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sumtec 2002-05-16
  • 打赏
  • 举报
回复
结贴结贴。下次有空的话把剩下的东西给你们贴上。
ghostjoe 2002-05-15
  • 打赏
  • 举报
回复
好东东。。。我有用,多谢!!
Kuye2002yx 2002-05-15
  • 打赏
  • 举报
回复
暂时用不到,不过还是要多谢你的分和以后才能用到的代码 ^_^
Mike_sun 2002-05-15
  • 打赏
  • 举报
回复
hehe
lsgl 2002-05-13
  • 打赏
  • 举报
回复
是啊!!写全最好!!我也想看!!
sumtec 2002-05-12
  • 打赏
  • 举报
回复
楼上的:
你想要吗?你想要你就说嘛!你不说我怎么知道呢?你说了我又不会不给你,你不说我又不会非要给你。咱们是讲道理的嘛!你要呢还是不要呢?你说啊!


呵呵,开开玩笑的。
非常抱歉,这个程序可能涉及版权问题,所以不方便寄给各位。(主要是里面的其他代码)

不过我会尽量把Socket编程部分分离出来贴在这个论坛上面,供大家参考。(大家放心,这个程序的代码是我写的,分离出来之后应该没有什么版权问题,是公共知识而已。)
leonnet 2002-05-11
  • 打赏
  • 举报
回复
楼上的,你心也太很了点,不过偶也想要

WAST 2002-05-11
  • 打赏
  • 举报
回复
不错,我用用!
smallerkk 2002-05-11
  • 打赏
  • 举报
回复
能給源碼給我嗎.
peter.ma@fookwah.com
TT008 2002-05-10
  • 打赏
  • 举报
回复
好象挺好的
Ninputer 2002-05-10
  • 打赏
  • 举报
回复
不错不错!
edreamy 2002-05-09
  • 打赏
  • 举报
回复
谢谢了,真是帮了我的大忙了,非常感谢!
cdzydgyr 2002-05-09
  • 打赏
  • 举报
回复
你打算做什么?送源程序和分给我?那就谢了

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧