Dim tcpClient As TcpClient Dim nsStream As NetworkStream tcpClient = New TcpClient( "www.microsoft.com" , 8000) '对远程主机的8000端口提出TCP连接申请 nsStream = tcpClient.GetStream ( ) 'TCP连接建立后,获得网络数据传输的基础数据流 |
方法 | 说明 |
BeginRead | 开始异步读者基础数据流。 |
BeginWrite | 开始异步写入基础数据流。 |
Close | 关闭流并可选择关闭基础套接字。 |
EndRead | 结束异步读取。 |
EndWrite | 结束异步写入。 |
Flush | 刷新流中的数据。 |
Read | 从流中读取数据。 |
Seek | 将流的当前位置设置为给定值。 |
SetLength | 设置流的长度。 |
Write | 将数据写入流。 |
属性 | 说明 |
CanRead | 获取当前流是否支持读取。 |
CanSeek | 获取流是否支持查找。该属性总是返回 false。 |
CanWrite | 获取当前流是否支持写入。 |
DataAvailable | 获取是否可以在流上读取数据。 |
Length | 流上可用数据的长度。 |
Position | 获取或设置流中的当前位置。 |
方法 | 说明 |
Close | 关闭StreamReader并释放与阅读器关联的所有系统资源。 |
DiscardBufferedData | 允许StreamReader丢弃其当前数据。 |
Peek | 返回下一个可用的字符,但不使用它。 |
Read | 读取输入流中的下一个字符或下一组字符。 |
ReadBlock | 从当前流中读取最大数量的字符并从索引开始将该数据写入缓冲区。 |
ReadLine | 从当前流中读取一行字符并将数据作为字符串返回。 |
ReadToEnd | 从流的当前位置到末尾读取流。 |
方法 | 说明 |
Close | 关闭当前的StreamWriter和基础流。 |
Flush | 清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。 |
Write | 写入基础数据流。 |
WriteLine | 写入重载参数指定的某些数据,后跟行结束符。 |
方法 | 说明 |
Close | 关闭 TCP 连接 |
Connect | 使用指定的主机名和端口号将客户端连接到 TCP主机 |
GetStream | 返回用于发送和接收数据的流 |
属性 | 描述 |
LingerState | 有关套接字逗留时间的信息 |
NoDelay | 一个值,该值在发送或接收缓冲区未满时启用延迟 |
ReceiveBufferSize | 接收缓冲区的大小 |
ReceiveTimeout | TcpClient在启动后为接收数据而等待的时间长度 |
SendBufferSize | 发送缓冲区的大小 |
SendTimeout | 在您启动发送操作后TcpClient将为接收确认而等待的时间长度 |
方法 | 说明 |
AcceptSocket | 接受挂起的连接请求 |
AcceptTcpClient | 接受挂起的连接请求 |
Pending | 确定是否有挂起的连接请求 |
Start | 开始侦听网络请求 |
Stop | 关闭侦听器 |
属性 | 说明 |
LocalEndpoint | 获取当前TcpListener的基础EndPoint |
Active | 获取一个值,该值指示 TcpListener 是否正主动侦听客户端连接 |
Server | 获取基础网络Socket |
组件类型 | 组件名称 | 属性 | 设置结果 |
Form | Form1 | Text | 服务器端程序 |
Form1 | MaximizeBox | False | |
Form1 | FormBorderStyle | FixedSingle | |
Button | Button1 | Text | 启动服务 |
Button1 | FlatStyle | Flat | |
Label | Label1 | Text | 服务尚未启动 |
StatusBar | StatusBar1 | Text | 无连接! |
Imports System.Net.Sockets '使用到TcpListen类 Imports System.Threading '使用到线程 Imports System.IO '使用到StreamReader类 |
Private iPort As Integer = 8000 '定义侦听端口号 Private thThreadRead As Thread '创建线程,用以侦听端口号,接收信息 Private tlTcpListen As TcpListener '侦听端口号 Private blistener As Boolean = True '设定标示位,判断侦听状态 Private nsStream As NetworkStream '创建接收的基本数据流 Private srRead As StreamReader '从网络基础数据流中读取数据 Private tcClient As TcpClient |
Private Sub Listen ( ) Try tlTcpListen = New TcpListener ( iPort ) '以8000端口号来初始化TcpListener实例 tlTcpListen.Start ( ) '开始监听 StatusBar1.Text = "正在监听..." tcClient = tlTcpListen.AcceptTcpClient ( ) '通过TCP连接请求 nsStream = tcClient.GetStream ( ) '获取用以发送、接收数据的网络基础数据流 srRead = New StreamReader ( nsStream ) '以得到的网络基础数据流来初始化StreamReader实例 StatusBar1.Text = "已经建立TCP连接!" '循环侦听 While blistener Dim sMessage As String = srRead.ReadLine ( ) '从网络基础数据流中读取一行数据 If ( sMessage = "STOP" ) Then tlTcpListen.Stop ( ) '关闭侦听 nsStream.Close ( ) srRead.Close ( ) '释放资源 StatusBar1.Text = "无连接!" thThreadRead.Abort ( ) '中止线程 Return Else '判断是否为断开TCP连接控制码 Dim sTime As String = DateTime.Now.ToShortTimeString ( ) '获取接收数据时的时间 ListBox1.Items.Add ( sTime + " " + sMessage ) End If End While Catch ex As System.Security.SecurityException MessageBox.Show ( "侦听失败!" , "错误" ) End Try End Sub |
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click thThreadRead = New Thread ( New ThreadStart ( AddressOf Listen ) ) '以Listen过程来初始化线程实例 thThreadRead.Start ( ) '启动线程 Button1.Enabled = False Label1.Text = "服务已经启动!" Label1.ForeColor = Color.Red End Sub |
Protected Overloads Overrides Sub Dispose ( ByVal disposing As Boolean ) Try thThreadRead.Abort ( ) '中止线程 tlTcpListen.Stop ( ) '关闭侦听 tcClient.Close ( ) nsStream.Close ( ) srRead.Close ( ) '释放资源 Catch End Try If disposing Then If Not ( components Is Nothing ) Then components.Dispose ( ) End If End If MyBase.Dispose ( disposing ) End Sub |
组件类型 | 组件名称 | 属性 | 设置结果 |
Form | Form1 | Text | 客户端程序 |
Form1 | MaximizeBox | False | |
Form1 | FormBorderStyle | FixedSingle | |
Button | Button1 | Text | 连接 |
Button1 | FlatStyle | Flat | |
Button2 | Text | 发送 | |
Button2 | FlatStyle | Flat | |
Label | Label1 | Text | 服务器IP地址: |
Label2 | Text | 信息: | |
StatusBar | StatusBar1 | Text | 无连接! |
TextBox | TextBox1 | Text | "" |
TextBox1 | BorderStyle | FixedSingle | |
TextBox2 | Text | "" | |
TextBox2 | BorderStyle | FixedSingle |
Imports System.Net.Sockets '使用到TcpListen类 Imports System.IO '使用到StreamWriter类 Imports System.Net '使用IPAddress类、IPHostEntry类等 |
Private swWriter As StreamWriter '用以向网络基础数据流传送数据 Private nsStream As NetworkStream '创建发送数据的网络基础数据流 Private tcpClient As TcpClient '通过它实现向远程主机提出TCP连接申请 Private tcpConnect As Boolean = False '定义标识符,用以表示TCP连接是否建立 |
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 |
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 |
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 |