TCP长连接 客户端关闭时怎么会有异常??急死俺了

xiami0911 2008-10-21 03:26:02
服务端:
Private Sub FrmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
listener1 = New TcpListener(System.Net.IPAddress.Parse("192.168.4.171"), "30000")
listener1.Start()
listening1 = True
Timer4.Enabled = True
end sub

Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
Dim CurThreadStart As ThreadStart

Timer4.Enabled = False
If listener1.Pending() Then
CurThreadStart = New ThreadStart(AddressOf request)
CurThread1 = New Thread(CurThreadStart)
CurThread1.Start()
End If
Timer4.Enabled = True
End Sub

Public Sub request()
CurThread1 = System.Threading.Thread.CurrentThread()

Dim buf(3000) As Byte
Dim senddata As String
Dim intLen As Integer
Dim ReceivedData As String
Dim cursocket As Socket
cursocket = listener1.AcceptSocket
cursocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 5000)
cursocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000)
Try
While listening1
Thread.Sleep(100)
If cursocket.Available > 0 Then


'接收来自绑定的Socket的数据
intLen = cursocket.Receive(buf, cursocket.Available, 0)
'将接收到的数据转化成相应编码的字符串
ReceivedData = System.Text.Encoding.Default.GetString(buf, 0, intLen)
System.Console.WriteLine(ReceivedData)
If ReceivedData = "close" Then
System.Threading.Thread.Sleep(1000)

System.Console.WriteLine(ReceivedData)
cursocket.Shutdown(Net.Sockets.SocketShutdown.Both)
cursocket.Close()
Exit While
End If
End If
If bln_rfid = True Then
bln_rfid = False
senddata = "张三:李四:王五"
buf = System.Text.Encoding.Default.GetBytes(senddata)
cursocket.Send(buf, buf.Length, 0)
End If

End While

Catch ex As Exception
cursocket.Shutdown(Net.Sockets.SocketShutdown.Both)
cursocket.Close()
System.Console.WriteLine(ex.Message + ex.Source + "关掉了")
End Try

End Sub


客户端:
Private Sub getconnect()
Dim ip As System.Net.IPAddress
Dim strrecvdatabegin As String
Dim buf(255) As Byte
Dim ilen As Integer
Dim beginbuff(255) As Byte
Dim strtemp As String
Dim strtemp2 As String
Dim strtemp3 As String
Dim strtemp4 As String

Try
tcpclient_info = New System.Net.Sockets.TcpClient

ip = System.Net.IPAddress.Parse(str_ip)
tcpclient_info.Connect(ip, "30000")
tcpclient_info.LingerState.Enabled = False
While (True)
System.Threading.Thread.Sleep(100)
ReDim beginbuff(255)
ReDim buf(255)
Application.DoEvents()
lnlasttime = Environment.TickCount

While Not tcpclient_info.GetStream.DataAvailable()
Application.DoEvents()
End While

'If Environment.TickCount - lnlasttime < 1000 And bln_close = False Then
If tcpclient_info.GetStream.DataAvailable() Then
tcpclient_info.GetStream.Read(beginbuff, 0, beginbuff.length)
strrecvdatabegin = System.Text.Encoding.Default.GetString(beginbuff, 0, beginbuff.length)
txtTemp.Text = strrecvdatabegin
End If
End While

Catch ex As Exception
'System.Console.Write(ex.Message)
End Try

End Sub

Private Sub frm_manager_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Dim strdata As String
Dim buf(255) As Byte

strdata = "close"
buf = System.Text.Encoding.Default.GetBytes(strdata)
tcpclient_info.GetStream.Write(buf, 0, buf.Length)
tcpclient_info.GetStream.Flush()
blnreturn = False
Timer1.Enabled = False
Timer2.Enabled = False
tcpclient_info.Close()
Me.Close()
Application.Exit()

End Sub

我建的是长连接,连上之后不断开,服务端一有数据就往客户端发送.
在客户端关闭的时候给服务器发送一个close的字段,显示客户端关闭连接了,然后服务端把这个线程断掉.但是客户端这边会报异常,报在红颜色字的那里,怎么都找不出来原因,不过我断点跟踪过好象是它一直会在While Not tcpclient_info.GetStream.DataAvailable()这个循环里面跳不出来,到底怎么解决啊,困扰死了
...全文
198 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiami0911 2008-10-23
  • 打赏
  • 举报
回复
怎么让它停下来?
wood87654321 2008-10-22
  • 打赏
  • 举报
回复
你先看看异常提示,如果是远端点强迫关闭了一个连接什么的那么忽略就是了
xiami0911 2008-10-22
  • 打赏
  • 举报
回复
晕死了,这里人气怎么这么弱了,老是问个问题没人答的
tfnpghl 2008-10-22
  • 打赏
  • 举报
回复
一般情况下客户端先关闭是不会出现问题,但是你的客户端代码有问题,代码一直在循环你要关闭先让循环停下来。
xiami0911 2008-10-21
  • 打赏
  • 举报
回复
自己顶下,高手来看下啊

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧