当前位置: 代码迷 >> VB Dotnet >> System.Net.Sockets 怎么自动断开监听
  详细解决方案

System.Net.Sockets 怎么自动断开监听

热度:77   发布时间:2016-04-25 02:08:51.0
System.Net.Sockets 如何自动断开监听?
Imports System.Net.Sockets
Imports System.Net
Imports System.Text
Imports System.Threading

Public Class Form1
    '定义两个窗体变量
    Dim s As Socket = Nothing
    Dim t As Thread

    '新建一个过程,用于处理接收到的Socket数据包
    Public Sub WaitData()
        s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) '使用TCP协议
        Dim localEndPoint As New IPEndPoint(IPAddress.Parse("127.0.0.1"), 1024)  '指定IP和Port
        s.Bind(localEndPoint)        '绑定到该Socket
        s.Listen(100)     '侦听,最多接受100个连接
        While (True)
            Dim bytes(1024) As Byte   '用来存储接收到的字节
            Dim ss As Socket = s.Accept()  '若接收到,则创建一个新的Socket与之连接
            ss.Receive(bytes)    '接收数据,若用ss.send(Byte()),则发送数据
            ListBox1.Items.Insert(0, Encoding.Unicode.GetString(bytes)) '将其插入到列表框的第一项之前
            '若使用Encoding.ASCII.GetString(bytes),则接收到的中文字符不能正常显示
        End While
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        t = New Thread(AddressOf WaitData)  '建立新的线程
        t.Start()     '启动线程
        Button1.Enabled = False   '按钮不可用,避免另启线程

    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        Try
            s.Close()
            t.Abort()
        Catch
        End Try
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        '在BtnStop的click事件中, 加入如下代码
        Try
            s.Close()     '关闭Socket
            t.Abort()     '中止线程
        Catch
        Finally
            Button1.Enabled = True   '启用BtnStart
        End Try
    End Sub
End Class


客户端只要发来一次信息,查看就会发现程序多一条监听,但客户端程序发送完毕后就退出了。如何让这个连接也断开呢?

TCP    127.0.0.1:52108        127.0.0.1:1024         FIN_WAIT_2
  TCP    127.0.0.1:52123        127.0.0.1:1024         FIN_WAIT_2
  TCP    127.0.0.1:52134        127.0.0.1:1024         FIN_WAIT_2
  TCP    127.0.0.1:52147        127.0.0.1:1024         FIN_WAIT_2

4个客户端过来 就有4个在这~
------解决思路----------------------
你怎么知道连接没有断开呢
你到底是在哪里看的
------解决思路----------------------
没有看你的代码,不知道程序中是什么情况。

不过windows本地端口不会立刻释放的,操作系统需要1分钟甚至数分钟时间才会释放它。不需要去管它,它会自动释放。
------解决思路----------------------
1分钟之后自己就掉了...你不用关心的..
  相关解决方案