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