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分钟之后自己就掉了...你不用关心的..