扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click Dim ipRemote As IPAddress Dim sHostName As String Dim tcpClient As TcpClient Try ipRemote = IPAddress.Parse ( TextBox1.Text ) Catch MessageBox.Show ( "输入的IP地址不合法!" , "错误提示!" ) Return '判断给定的IP地址的合法性 End Try Try tcpClient = New TcpClient ( TextBox1.Text , 8000 ) '对远程主机的8000端口提出TCP连接申请 nsStream = tcpClient.GetStream ( ) '通过申请,并获取传送数据的网络基础数据流 swWriter = New StreamWriter ( nsStream ) '使用获取的网络基础数据流来初始化StreamWriter实例 Button1.Enabled = False Button2.Enabled = True tcpConnect = True StatusBar1.Text = "已经连接!" Catch MessageBox.Show ( "无法和远程主机8000端口建立连接!" , "错误提示!" ) Return End Try End Sub |
12. 用下列代码替换Form1.vb中的Button2的Click事件对应的处理代码,下列代码功能是对基础数据流进行写操作,实现向远程主机传输文本数据:
Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.Click If ( TextBox2.Text <> "" ) Then swWriter.WriteLine ( TextBox2.Text ) '刷新当前数据流中的数据 swWriter.Flush ( ) TextBox2.Text = "" Else MessageBox.Show ( "发送信息不能为空!" , "错误提示!" ) End If End Sub |
13. 用下列代码替换Form1.vb中的Dispose过程,下面代码的作用是重新定义Dispose过程,在过程中判断TCP连接是否仍然建立,如果建立则向远程主机传送控制码,断开连接,并手动清除使用的资源,回收垃圾:
Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean ) If tcpConnect Then swWriter.WriteLine ( "STOP" ) '发送控制码 swWriter.Flush ( ) '刷新当前数据流中的数据 nsStream.Close ( ) swWriter.Close ( ) '清除资源 ( ) End If If disposing Then If Not ( components Is Nothing ) Then components.Dispose ( ) End If End If MyBase.Dispose ( disposing ) End Sub |
14. 至此【客户端程序】就完成了。在正确编译项目后。就可以选择局域网中任二台计算机来测试了,一台运行客户端程序,一台运行服务器端程序。在服务器端程序运行后,单击【启动服务】按钮,启动服务后。在客户端程序的【服务器IP地址】文本框中输入网络中运行服务器端程序主机对应的IP地址后,单击【连接】按钮,就和启动服务的服务器端程序建立TCP连接,此时就可以在客户端程序的【信息】文本框中输入文本信息后,单击【发送】按钮就能够把文本信息传送到服务器端了。图03和图04分别是客户端程序和服务器端程序运行后进行通讯时的界面:
五.总结:
虽然本文用Visual Basic .Net实现一个简单的基于TCP协议的网络应用程序。但程序中使用的是NetworkStream作为载体,通过StreamWriter和StreamReader通过操作这个载体从而实现数据传输和接收。这种实现TCP协议方法虽然比较简单,但却无法回避NetworkStream作为网络传输、接收数据载体的一个致命的缺陷,那就是NetworkStream只能传输基于文本类型的数据,如果要传输基于字节的数据,使用这种方法就勉为其难了。而套接字(Socket)就能够胜任这项工作,套接字不仅能够实现各种类型数据在网络上的传输和接收,也是实现网络中其他应用协议的关键。诸位若想真正成为网络编程的高手,必须掌握Socket的使用方法。最后希望本文能够开启您编写网络应用程序之门,对您掌握更深层次网络编程有所帮助。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者