以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 请问一下关于tcp (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=160791) |
-- 作者:tcmhl -- 发布时间:2021/2/22 9:15:00 -- 请问一下关于tcp 学习中,请问一下,下面代码为啥每次连接只能收到第一次发送的数据并新增行 Public iPort As Integer = 10086 Public thThreadRead As System.Threading.Thread Public tlTcpListen As System.Net.Sockets.TcpListener Public blistener As Boolean = True Public nsStream As System.Net.Sockets.NetworkStream \'\'\'\'创建接收的基本数据流 Public srRead As System.IO.StreamReader \'\'\'\'从网络基础数据流中读取数据 Public tcClient As System.Net.Sockets.TcpClient Public Sub Listen() Try tlTcpListen = New System.Net.Sockets.TcpListener (iPort) \'\'\'\'以8000端口号来初始化TcpListener实例 tlTcpListen.Start() \'\'\'\'开始监听 \'StatusBar1.Text = "正在监听..." tcClient = tlTcpListen.AcceptTcpClient() \'\'\'\'通过TCP连接请求 nsStream = tcClient.GetStream ( ) \'\'\'\'获取用以发送?接收数据的网络基础数据流 srRead = New System.IO.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 MessageBox.Show(sMessage) End While Catch ex As System.Security.SecurityException MessageBox.Show ( "侦听失败!" , "错误" ) End Try End Sub
|
-- 作者:有点蓝 -- 发布时间:2021/2/22 9:26:00 -- 去做个可以测试的项目实例发上来测试 |
-- 作者:tcmhl -- 发布时间:2021/2/22 9:27:00 -- 感谢! [此贴子已经被作者于2021/2/22 9:27:29编辑过]
|
-- 作者:有点蓝 -- 发布时间:2021/2/22 9:40:00 -- AcceptTcpClient方法要放到循环里面,参考:https://blog.csdn.net/nuistchn/article/details/50809158 或者看看这个例子:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=28230&skin=0
|