用VB2010的socket编程,编了一个通信程序,可以实现在一台电脑上相互通信,但将服务器端和客户端分别放到两台电脑时则不能相互通信
服务器端程序
Imports System.IO
Imports System.Threading
Imports System.Net
Imports System.Net.Sockets
Public Class Form1
Dim serverThread As Thread
Dim tcpListener As TcpListener
Dim netStream As NetworkStream
Dim rdStream As StreamReader
Dim wtStream As StreamWriter
Dim clientSocket As Socket
Private Sub Listen()
Dim clientMsg As String
tcpListener = New TcpListener(1111)
Try
tcpListener.Start()
clientSocket = tcpListener.AcceptSocket()
If clientSocket.Connected Then
lstClient.Items.Add("new user")
netStream = New NetworkStream(clientSocket)
rdStream = New StreamReader(netStream)
wtStream = New StreamWriter(netStream)
End If
While (True)
clientMsg = rdStream.ReadLine()
If clientMsg = "Exit" Then
Exit Sub
End If
lstClient.Items.Add(clientMsg)
End While
Catch ex As SocketException
MessageBox.Show("无法打开端口")
Catch ex As IOException
Catch ex As ThreadAbortException
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub EndListen()
If (Not netStream Is Nothing) Then
serverThread.Abort()
tcpListener.Stop()
End If
End Sub
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
Try
serverThread = New Thread(AddressOf Listen)
serverThread.Start()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub Form1_Disposed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Disposed
EndListen()
End Sub
Private Sub send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles send.Click
Try
wtStream.WriteLine(TextBox1.Text)
wtStream.Flush()
Catch ex As Exception
MessageBox.Show("无法发送消息")
End Try
End Sub
Private Sub out_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles out.Click
End
End Sub
End Class
客户端程序
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Public Class Form1
Dim tcpClient As TcpClient
Dim netStream As NetworkStream
Dim rdStream As StreamReader
Dim wtStream As StreamWriter
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
Try
tcpClient = New TcpClient("localhost", 1111)
netStream = tcpClient.GetStream()
rdStream = New StreamReader(netStream)
wtStream = New StreamWriter(netStream)
Catch ex As Exception
MessageBox.Show("无法连接服务器")
End Try
End Sub
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
Try
wtStream.WriteLine(txtMsg.Text)
wtStream.Flush()
Catch ex As Exception
MessageBox.Show("无法发送消息")
End Try
End Sub
Private Sub Form1_Disposed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Disposed
wtStream.WriteLine("Exit")
wtStream.Flush()
End Sub
Private Sub TextBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Click
TextBox1.Text = rdStream.ReadLine()
End Sub
End Class
相关推荐
用VB实现两台电脑相互通讯
本项目通过VB编写了一个服务器和客户端的通讯程序,允许两台计算机之间交换数据。下面将详细介绍如何使用VB实现这一功能。
在VS2010中实现基本Socket客户端代码的完整示例
Visual Studio 2010 是微软公司推出的一款功能强大的集成开发环境(IDE),它支持多种编程语言和框架,为开发者提供了从创建到调试和部署应用程序的一站式服务。这一章节将带领读者了解 Visual Studio 2010 的基本界面布局、关键功能以及如何使用它来创建一个简单的项目。
深入理解与实现UDP通信程序(VS2010)
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的网络协议,提供了一种快速且不可靠的数据传输服务。与TCP(Transmission Control Protocol)不同,UDP在数据传输前不需要建立连接,数据包的发送和接收之间没有维护状态的开销,这使得UDP更适合于对实时性要求较高、可以容忍一定程度丢包的应用场景。以下是UDP协议的几个关键特点及其应用场景:无连接:无需建立连接即可直接发送数据,这大大减少了延迟,适合于实时应用。效率高。
VB.NET 2010 可直接运行的TCP双向通信演示(含客户端+服务端完整工程)
提供两个独立可编译的VB.NET 2010项目:TCPServer.sln 和 TCPClient.sln,开箱即用,无需修改配置即可运行。服务端支持多客户端连接监听,客户端可发起连接、发送字符串、接收服务端响应;双方均采用委托机制配合Invoke实现跨线程UI更新,彻底规避WinForms中常见的“线程间操作无效”异常。所有资源文件(.resx)、配置文件(app.config)、项目设置(.vbproj、.settings)和解决方案元数据(.suo)均已预置齐全,包含Form1.Designer.vb
经典 VB.net 里面的socket通讯范例
- 当有客户端连接请求时,Accept方法会阻塞等待,直到新的连接到达,返回一个新的Socket用于与客户端通信。


