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

VB.NET Socket 经典有关问题。

2012-07-08 
VB.NETSocket 经典问题。。。。看了很多答案,小弟还是不解呀,求高手赐教。现在很多Socket的源码都是清一色的聊

VB.NET Socket 经典问题。。。。
看了很多答案,小弟还是不解呀,求高手赐教。

现在很多Socket的源码都是清一色的聊天工具,无非是将一个客户端一个窗口的文本框内容发送到服务器的一个列表框。。。

小弟初次接触Socket,请问假如我在客户端定义两个文本框1、2,都输入内容。。。然后服务器端也定义两个文本框1、2,分别接受客户端的内容。即客户端1发送到服务器端1、客户端2发送到服务器。。。
怎么才能实现哦。。
谢谢了


1、服务端

Imports System.Net

Imports System.Net.Sockets

Imports System.Threading

Imports System.Text

Imports System.Diagnostics

 

Public Class frmServer

 

  '服务端的Socket

  Dim listener As Socket

  '与客户端会话的Socket

  Dim mySocket As Socket

  '服务端的运行状态

  Dim IsRun As Boolean = False

  '监听接收数据线程

  Dim myThread As Thread

 

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  myThread = New Thread(AddressOf Listen)

  myThread.Start()

  End Sub

 

  Public Sub Listen()

  Dim bytes() As Byte = New [Byte](1024) ...{}

  Dim data As String = String.Empty

  Dim tokens() As String

 

  Dim localEndPoint As New IPEndPoint(Net.IPAddress.Parse("127.0.0.1"), 11000)

  '初始化socket

  listener = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

  '绑定端口

  listener.Bind(localEndPoint)

  '开始监听

  listener.Listen(10)

 

  BeginInvoke(New EventHandler(AddressOf AddInfo), "服务端已启动,正在等待连接......")

 

  mySocket = listener.Accept()

  IsRun = True

 

  While True

  Dim bytesRec As Integer = mySocket.Receive(bytes)

  data = Encoding.UTF8.GetString(bytes, 0, bytesRec)

 

  tokens = data.Trim.Split("|")

  Select Case tokens(0) '分析接收到的数据,可自己定义更多一些

  Case "Chat"

  BeginInvoke(New EventHandler(AddressOf AddInfo), tokens(1)) 'Invoke保证线程安全

  Case "Exit"

  IsRun = False

  BeginInvoke(New EventHandler(AddressOf AddInfo), tokens(1)) 'Invoke保证线程安全

  mySocket.Shutdown(SocketShutdown.Both)

  mySocket.Close()

  Exit Sub

  End Select

  End While

 

  End Sub

 

  '发送信息

  Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click

  Dim msg As Byte() = Encoding.UTF8.GetBytes("Chat|" + TextBox1.Text)

  mySocket.Send(msg)

  ListBox1.Items.Add("本地信息: " + TextBox1.Text)

 

  TextBox1.Text = ""

  End Sub

 

  '非UI线程调用窗体控件,保证线程安全。与聊天实现无关。

  Sub AddInfo(ByVal sender As System.Object, ByVal e As System.EventArgs)

  ListBox1.Items.Add("远程信息: " + sender.ToString)

  End Sub

 

  '关闭窗口时发关退出信息并清理资源

  Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

  If IsRun Then



  Dim msg As Byte() = Encoding.UTF8.GetBytes("Exit|服务端退出: " + Me.Handle.ToString)

  Dim bytesSent As Integer = mySocket.Send(msg)

  End If

  listener.Close()

  mySocket = Nothing

  myThread.Abort()

  End Sub

 

End Class

 

2、客户端

Imports System.Net

Imports System.Net.Sockets

Imports System.Text

Imports System.Threading

 

Public Class frmClient

  '客户端Socket

  Dim cliSocket As Socket

  '连接状态

  Dim IsConnected As Boolean = False

  '接收信息线程

  Dim myThread As Thread

 

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  Dim remoteEP As New IPEndPoint(Net.IPAddress.Parse("127.0.0.1"), 11000)

  cliSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

  Try

  cliSocket.Connect(remoteEP)

  ListBox1.Items.Add("连接服务端成功!")

  IsConnected = True

 

  myThread = New Thread(AddressOf ReciveMsg)

  myThread.Start()

  Catch ex As Exception

  ListBox1.Items.Add(ex.Message)

  End Try

  End Sub

 

  Sub ReciveMsg()

  Dim bytes() As Byte = New Byte(1024) ...{}

  Dim data As String = String.Empty

  Dim tokens() As String

 

  While True

  Dim bytesRec As Integer = cliSocket.Receive(bytes)

  data = Encoding.UTF8.GetString(bytes, 0, bytesRec)

 

  tokens = data.Trim.Split("|")

  Select Case tokens(0) '分析接收到的数据,可自己定义更多一些

  Case "Exit"

  IsConnected = False

  BeginInvoke(New EventHandler(AddressOf AddInfo), tokens(1)) 'Invoke保证线程安全

  cliSocket.Shutdown(SocketShutdown.Both)

  cliSocket.Close()

  Exit Sub

  Case "Chat"

  BeginInvoke(New EventHandler(AddressOf AddInfo), tokens(1)) 'Invoke保证线程安全

  End Select

 

  End While

 

  End Sub

 

  '发送信息

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  Dim msg As Byte() = Encoding.UTF8.GetBytes("Chat|" + TextBox1.Text)

  Dim bytesSent As Integer = cliSocket.Send(msg)

 

  ListBox1.Items.Add("本地信息: " + TextBox1.Text)

  TextBox1.Text = ""

  End Sub

 

  '非UI线程调用窗体控件,保证线程安全。与聊天实现无关。

  Sub AddInfo(ByVal sender As System.Object, ByVal e As System.EventArgs)

  ListBox1.Items.Add("远程信息: " + sender.ToString)

  End Sub

 

  '关闭窗口时发关退出信息并清理资源

  Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

  If IsConnected Then



  Dim msg As Byte() = Encoding.UTF8.GetBytes("Exit|客户端退出: " + Me.Handle.ToString)

  Dim bytesSent As Integer = cliSocket.Send(msg)

  myThread.Abort()

  End If

 

  End Sub

End Class



[解决办法]
如果你理解了聊天工具,能发能收,这个变通一下就是了。

如果多不愿意自己去理解,就上这儿来找现成,可能有点抱歉
[解决办法]
最简单的去看101实例里的

热点排行