请教:一个关于VB.NET使用多线程和Socket端口侦听的疑惑??????

NewGeeker 2011-01-20 11:21:15
1.如何才可以停止后台线程的运行?
2.当我停止线程后,如何再重新开始线程(Thread)?

3.用socket做服务器侦听端口,如何才可以停止socket的运行?
4.当我停止socket后,我如何再重新开始socket?
...全文
383 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
music_0000 2011-02-15
  • 打赏
  • 举报
回复
http://download.csdn.net/source/2874845
oo渣渣oo 2011-02-15
  • 打赏
  • 举报
回复
这是我自己做的一个通讯类,你就把它当Socket就好了
NewGeeker 2011-02-10
  • 打赏
  • 举报
回复
Dim sckUnit As New FeeSocketClass.Communication(UnitListen.AcceptSocket)

这个FeeSocketClass是什么东东呢?
Alexsunmoon 2011-01-22
  • 打赏
  • 举报
回复
学习。难得的源代码
wuyq11 2011-01-22
  • 打赏
  • 举报
回复
线程进用stoped状态,会被销毁
要想再次启动线程,只能得新建一个新的线程

BackgroundWorker bw;
if(!bw.IsBusy)
{
bw.RunWorkerAsync();
}

Kation 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 stinby 的回复:]
我的应用是要做个服务器软件,在运行中随时都可能很多个客户端进来的连接。

我的思路是这样的:
单独弄一个线程,一直在死循环执行Accept,接受新客户。
再弄另一个线程,一直循环Receive 接收客户端发来的数据,并进行数据处理。

不知道这样做和不合理呢? 有什么更好的办法吗?
[/Quote]

呵呵,如果不用死循环呢
http://vbnet.5d6d.com/thread-7-1-1.html
http://vbnet.5d6d.com/thread-65-1-1.html
oo渣渣oo 2011-01-20
  • 打赏
  • 举报
回复

Private Sub StartUnitProcessing(ByVal objIndex As Object)
Dim sckIndex As Integer = CInt(objIndex)
Try
UnitArray(sckIndex).ReceiveTimeout = intTimeout * 1000
If UnitArray(sckIndex).Receive() Then
......
oo渣渣oo 2011-01-20
  • 打赏
  • 举报
回复
代码给你,自己研究吧


Private UnitListen As TcpListener '商户连接侦听器
Private UnitListenThread As Thread '商户连接侦听线程
Private blnStopUnitListen As Boolean '停止侦听商户连接开关
Private UnitArray(MaxUnitThread - 1) As FeeSocketClass.Communication

'启动商户端侦听线程
Private Sub LoadUnitListener()
blnStopUnitListen = False
UnitListenThread = New Threading.Thread(AddressOf StartUnitListen)
UnitListenThread.Name = "商户端侦听进程"
UnitListenThread.Start()
End Sub

'商户端侦听线程
Private Sub StartUnitListen()
UnitListen.Start()
AddMessage("商户端侦听端口已启动.", , True)
Try
Do
Dim sckUnit As New FeeSocketClass.Communication(UnitListen.AcceptSocket)
Dim I As Integer
For I = 0 To MaxUnitThread - 1
If IsNothing(UnitArray(I)) Then
UnitArray(I) = sckUnit
ThreadPool.QueueUserWorkItem(New Threading.WaitCallback(AddressOf StartUnitProcessing), I)
Exit For
End If
Next
If I >= MaxUnitThread Then sckUnit.Close()
sckUnit = Nothing
Loop Until blnStopUnitListen = True
Catch e As Exception
If Not blnStopUnitListen Then
AddMessage("[商户端侦听线程出错]" & e.Message, KnownColor.Red, True)
RestartUnitListen()
Else
CloseUnitListen()
End If
End Try
End Sub

'关闭商户端侦听线程
Private Sub CloseUnitListen()
blnStopUnitListen = True
If Not IsNothing(UnitListen) Then
UnitListen.Stop()
UnitListen = Nothing
End If
End Sub

Private Sub RestartUnitListen()
CloseUnitListen()
AddMessage("商户侦听线程已关闭.将于5秒后重新启动 ...", , True)
Dim w As New WaitTimeClass.WaitTime
w.Wait(5000)
w = Nothing
LoadUnitListener()
End Sub

NewGeeker 2011-01-20
  • 打赏
  • 举报
回复
我的应用是要做个服务器软件,在运行中随时都可能很多个客户端进来的连接。

我的思路是这样的:
单独弄一个线程,一直在死循环执行Accept,接受新客户。
再弄另一个线程,一直循环Receive 接收客户端发来的数据,并进行数据处理。

不知道这样做和不合理呢? 有什么更好的办法吗?
oo渣渣oo 2011-01-20
  • 打赏
  • 举报
回复
新的Socket线程负责通讯和处理,处理完成后线程自然就结束了
oo渣渣oo 2011-01-20
  • 打赏
  • 举报
回复
侦听不用Socket,我一般用TCPListener侦听,接受连接后再丢到一个新的线程里进行通讯和处理.
这样很容易就能用TCPListener.Stop来停止侦听
NewGeeker 2011-01-20
  • 打赏
  • 举报
回复
谢谢楼上的!~~~

16,554

社区成员

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

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