Socket只运行一次

tkdyzc 2006-04-14 04:50:39
请问为什么我的Socket服务端只运行一次就不循环进行了,怎样能退出再循环执行??

Try
serverThread = New Thread(AddressOf Listen)
serverThread.Start()

'关闭窗口时运行
'EndListen()
Catch ex As Exception
MsgBox(ex.Message)
End Try



Dim clientMsg As String
tcpListener = New TcpListener(Net.IPAddress.Parse("168.8.100.14"), 1111)
Try
TcpListener.Start()
clientSocket = TcpListener.AcceptSocket()
If clientSocket.Connected Then
'MsgBox("有信息到啊")

'lstClient.Items.Add("New User")
'MsgBox("新用户")
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)
MsgBox(clientMsg)
End While
Catch ex As SocketException
MsgBox("无法打开端口")
Catch ex As IOException
Catch ex As ThreadAbortException
Catch ex As Exception
MsgBox(ex.Message)

End Try
...全文
481 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tkdyzc 2006-04-17
  • 打赏
  • 举报
回复
我的实例和你一样,但是不知你试过没有,当服务器端运行的时候,客户端启动第一次没有问题,当启动第二次就不行了,就接受不到了.必须关闭服端程序,在重新启动一下,客户端发送来的信息才能接受到
不务正 2006-04-17
  • 打赏
  • 举报
回复
客户端:
Dim tcpClient As tcpClient
Dim netStream As NetworkStream
Dim rdStream As StreamReader
Dim wtStream As StreamWriter

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
wtStream.WriteLine(TextBox1.Text)
wtStream.Flush()
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


tcpClient = New TcpClient("127.0.0.1", 1111)
netStream = tcpClient.GetStream()
rdStream = New StreamReader(netStream)
wtStream = New StreamWriter(netStream)

End Sub


调试时,服务端程序的输出窗口
不务正 2006-04-17
  • 打赏
  • 举报
回复
好象没有错,你试一下下面的例子
服务端:
Imports System.Text
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.Runtime
Imports System.Configuration
Imports System.IO
Public Class Form1

Dim serverThread As Thread
Dim TcpListener As TcpListener
Dim clientSocket As Socket
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
serverThread = New Thread(AddressOf Listen)
serverThread.Start()
End Sub
Sub Listen()
Dim clientMsg As String
TcpListener = New TcpListener(Net.IPAddress.Parse("127.0.0.1"), 1111)

TcpListener.Start()
clientSocket = TcpListener.AcceptSocket()
If clientSocket.Connected Then
Debug.WriteLine("fdf")
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
Debug.WriteLine(clientMsg)
End While

End Sub

End Class
tkdyzc 2006-04-17
  • 打赏
  • 举报
回复
谢谢兄台回复,但是我不是这个意思,可能我说的不是很清楚,我的意思是服务器端一直运行,客户端发送后,服务器端就接受一次,但是我现在的程序一旦服务器运行起来后,只能接受道客户端发送来的一次信息,好像一直占用着进程.我的目的是可以接受到客户端多次发来的信息,是不是需要牵掣道进程的问题
tkdyzc 2006-04-17
  • 打赏
  • 举报
回复
谢谢兄台的帮助,问题已经解决,这就散分
不务正 2006-04-17
  • 打赏
  • 举报
回复
别忘了在客户端加上
Private Sub frmClient_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
wtStream.WriteLine("Exit")
wtStream.Flush()
End Sub
不务正 2006-04-17
  • 打赏
  • 举报
回复
简单点,你可以
Sub Listen()
Dim clientMsg As String
TcpListener = New TcpListener(Net.IPAddress.Parse("127.0.0.1"), 1111)
TcpListener.Start()
While (True)
clientSocket = TcpListener.AcceptSocket()
If clientSocket.Connected Then
Debug.WriteLine("一个新用户进入!")
netStream = New NetworkStream(clientSocket)
rdStream = New StreamReader(netStream)
wtStream = New StreamWriter(netStream)
End If
While (True)
clientMsg = rdStream.ReadLine()
If clientMsg = "Exit" Then
Debug.WriteLine("一个用户退出!")
Exit While
End If
Debug.WriteLine(clientMsg)
End While
End While

End Sub
不务正 2006-04-17
  • 打赏
  • 举报
回复
我才明白你的意思!
你要使服务端能多次接受客户端的连接请求。

While (True)
clientMsg = rdStream.ReadLine()'客户端断开后,这里会出现异常。
'因为你把它放在try中,所以看不到.要避免这个.
'可以在客户端关闭时发送 Exit 消息 但这样就跳出这个循环了。
'不能再次接收信息了
If clientMsg = "Exit" Then
Exit Sub
End If
Debug.WriteLine(clientMsg)
End While
tkdyzc 2006-04-17
  • 打赏
  • 举报
回复
If clientMsg = "Exit" Then
计时器设置为True
Exit Sub

End If
我加了一个计时器,当执行完Exit Sub后,这个程序将处于停止状态
tkdyzc 2006-04-17
  • 打赏
  • 举报
回复
难道真的没有高手在吗??
copico 2006-04-14
  • 打赏
  • 举报
回复
是否是因为运行了这句
If clientMsg = "Exit" Then
Exit Sub

End If
你用F10单步跟踪看看走到哪里
不务正 2006-04-14
  • 打赏
  • 举报
回复
请问为什么我的Socket服务端只运行一次就不循环进行了,怎样能退出再循环执行??
---------------------------------------------------
???

16,555

社区成员

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

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