首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

VB2005中怎么使用SOCKET

2012-01-26 
VB2005中如何使用SOCKET小弟我最近想写个局域网管理软件本想用VB6写的,但是发现有很多限制。于是研究NET。SO

VB2005中如何使用SOCKET
小弟我最近想写个局域网管理软件 本想用VB6写的,但是发现有很多限制。于是研究NET。SOCKET 。
现在对SOCKET一点都不懂。谁有这方面的资料,或者给我发一个简单的TCP/IP C/S结构的程序,我将感激不尽.
以前是用VB6的WINSOCK控件写,现在主要是不知道如何用SOCKET连接和控制,像控件都有个事件,SOCKET的事件在哪...???
是vb2005的socket类资料 
  如果有需要发我QQ:767431339
  结果满意分一定加上,觉得好另外在加分哦`
  谢谢!


[解决办法]
刚刚帮别人写过这个类的:

VB.NET code
 
Imports System.Net
Imports System.Net.Sockets
Imports System.IO
Public Class MCLNet

  ''' <summary>
  ''' 端口通讯
  ''' </summary>
  ''' <remarks> </remarks>
  Public Class Socket

    ''' <summary>
    ''' 监听指定端口
    ''' </summary>
    ''' <remarks>
    ''' </remarks>
    Public Class Listen
      Private localAddr As IPAddress
      Private Listenport As Integer
      Private a As New System.Threading.Thread(AddressOf Listening)
      Private listener As System.Net.Sockets.TcpListener

      ''' <summary>
      ''' 创建监听
      ''' </summary>
      ''' <param name="Intport">监听端口 </param>
      ''' <param name="strLocalIPAddress">本机IP,不指定为自动获取 </param>
      ''' <remarks> </remarks>
      Sub New(ByVal Intport As Integer, Optional ByVal strLocalIPAddress As String = "")
        If strLocalIPAddress <> "" Then
          localAddr = IPAddress.Parse(strLocalIPAddress)
        Else
          localAddr = IPAddress.Parse(GetMyIPAddress())
        End If
        Listenport = Intport
      End Sub

      ''' <summary>
      ''' 启动监听
      ''' </summary>
      ''' <remarks> </remarks>
      Public Sub StartListen()
        If Not a.IsAlive Then a.Start()
      End Sub

      ''' <summary>
      ''' 终止监听
      ''' </summary>
      ''' <remarks> </remarks>
      Public Sub CloseCon()
        If a.IsAlive Then
          a.Abort()
          listener.Stop()
        End If
      End Sub

      ''' <summary>
      ''' 监听状态
      ''' </summary>
      ''' <value> </value>
      ''' <returns> </returns>
      ''' <remarks> </remarks>
      Public ReadOnly Property ConState() As Boolean
        Get
          Return a.IsAlive
        End Get
      End Property



      ''' <summary>
      ''' 供开发者获得Sampe代码
      ''' </summary>
      ''' <value> </value>
      ''' <returns> </returns>
      ''' <remarks> </remarks>
      Public ReadOnly Property SampleCode() As String
        Get
          Dim strSample As String
          strSample = " Sample:" & vbCrLf
          strSample &= " Dim WithEvents a As MyClassLibrary.MCLNet.Socket.Listen" & vbCrLf
          strSample &= " Delegate Sub changeText(ByVal result As String)" & vbCrLf
          strSample &= " Private Sub receiveMSG(ByVal strdata As String) Handles a.Receive" & vbCrLf
          strSample &= "    BeginInvoke(New changeText(AddressOf GetMessage), strdata)" & vbCrLf
          strSample &= " End Sub" & vbCrLf
          strSample &= " Public Sub GetMessage(ByVal strdata As String)" & vbCrLf
          strSample &= "    TextBox1.Text = strdata " & vbCrLf
          strSample &= " End Sub" & vbCrLf
          Return strSample
        End Get
      End Property

      Private Sub Listening()

        listener = New System.Net.Sockets.TcpListener(localAddr, Listenport)
        listener.Start()

        Dim bytes(1024) As Byte
        Dim data As String = Nothing

        While True

          ' Perform a blocking call to accept requests.
          ' You could also user server.AcceptSocket() here.
          Dim client As TcpClient = listener.AcceptTcpClient()

          data = Nothing

          ' Get a stream object for reading and writing
          Dim stream As NetworkStream = client.GetStream()

          Dim i As Int32

          ' Loop to receive all the data sent by the client.
          i = stream.Read(bytes, 0, bytes.Length)
          While (i <> 0)
            ' Translate data bytes to a ASCII string.
            data = System.Text.Encoding.Unicode.GetString(bytes, 0, i)
            'Console.WriteLine("Received: {0}", data)
            RaiseEvent Receive(data)

            i = 0
          End While
          client.Close()
        End While
      End Sub

      Public Event Receive(ByVal strdata As String)

    End Class

    ''' <summary>
    ''' 向指定的IP与端口发送消息
    ''' </summary>
    ''' <remarks> </remarks>


    Class SendMsg
      Dim ns As NetworkStream
      Dim clientsocket As TcpClient
      Private _strRemoteIPAddress As String
      Private _intRemotePort As Integer
      ''' <summary>
      ''' 创建发送过程
      ''' </summary>
      ''' <param name="strRemoteIPAddress">远程IP地址 </param>
      ''' <param name="intRemotePort">远程端口 </param>
      ''' <remarks> </remarks>
      Public Sub New(ByVal strRemoteIPAddress As String, ByVal intRemotePort As Integer)
        _strRemoteIPAddress = strRemoteIPAddress
        _intRemotePort = intRemotePort
      End Sub

      ''' <summary>
      ''' 发送消息
      ''' </summary>
      ''' <param name="strMSG">消息内容 </param>
      ''' <remarks> </remarks>
      Public Sub SendMessage(ByVal strMSG As String)
        clientsocket = New TcpClient(_strRemoteIPAddress, _intRemotePort)
        ns = clientsocket.GetStream()
        Dim command As String = strMSG
        Dim outbytes As Byte() = System.Text.Encoding.Unicode.GetBytes(command.ToCharArray())
        ns.Write(outbytes, 0, outbytes.Length)
        clientsocket.Close()
      End Sub
    End Class
  End Class

End Class



监听是持续的,所以会在另一个线程里单独做,因为多了个线程,所以得到结果要用委托处理。
监听到数据会触发自定义的Receive事件。
示例参考这个帖子:
http://topic.csdn.net/u/20080623/11/fe733074-ba23-4d8c-a57a-a5f90e94d769.html

热点排行