Imports System.Net Imports System.Net.Sockets Imports System.Threading Imports System.Net.NetworkInformation Imports System.Text Imports System.Diagnostics Imports System.IO
Public Class Frm_tcp Dim Socketlisten As Socket '服务器Socket Dim b4aSocket As Socket '客户端Socket Dim Socketst As Boolean = False 'Socket状态 Dim listenThread As Thread 'Socket侦听进程
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
exit_listen()
End
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
txt_ip.Text = Get_Ip()
txt_prot.Text = 8880
create_listen()
End Sub
Public Sub Listenb4a()
Dim temp() As Byte = New [Byte](51200) {} '定义字节数组
Dim get_data As String = ""
Dim arr() As String
Dim localEndPoint As New IPEndPoint(Net.IPAddress.Parse(txt_ip.Text), txt_prot.Text)
Socketlisten = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) '初始化socket
Socketlisten.Bind(localEndPoint) '绑定端口
Socketlisten.Listen(10) '开始监听
'------------------------------------
b4aSocket = Socketlisten.Accept
Socketst = True
While True
Dim bytesRec As Integer = b4aSocket.Receive(temp)
get_data = Encoding.UTF8.GetString(temp, 0, bytesRec)
arr = get_data.Trim.Split("|")
If arr(0) <> "" Then
BeginInvoke(New EventHandler(AddressOf addlist), arr(0)) 'Invoke保证线程安全
Else
exit_listen()
Socketst = False
End If
End While
End Sub
Sub addlist(ByVal sender As System.Object, ByVal e As System.EventArgs) '保证线程安全
get_list.Items.Add(sender.ToString)
End Sub
Sub addtxt(ByVal sender As System.Object, ByVal e As System.EventArgs) '保证线程安全
bt_st.Text = (sender.ToString)
End Sub
'退出侦听
Sub exit_listen()
If Socketst = True Then
Dim msg As Byte() = Encoding.UTF8.GetBytes("服务端退出....")
Dim bytesSent As Integer = b4aSocket.Send(msg)
BeginInvoke(New EventHandler(AddressOf addtxt), "停止侦听")
Socketst = False
End If
Socketlisten.Close()
b4aSocket = Nothing
listenThread.Abort()
bt_st.Text = "停止侦听"
End Sub
Sub create_listen() '创建侦听
listenThread = New Thread(AddressOf Listenb4a) '创建侦听新进程
listenThread.Start() '侦听进程开始
bt_st.Text = "正在侦听"
End Sub
'获取本机IP地址
Public Function Get_Ip() As String
Dim hostName As String = System.Net.Dns.GetHostName.ToString
Dim IPString As String = "127.0.0.1"
Dim ip As System.Net.IPAddress
For Each ip In System.Net.Dns.GetHostEntry(hostName).AddressList()
If ip.AddressFamily = Net.Sockets.AddressFamily.InterNetwork Then
IPString = ip.ToString
Exit For
End If
Next
Return IPString
End Function
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_st.Click
If listenThread.ThreadState = 0 Then
exit_listen()
ElseIf listenThread.ThreadState > 0 Then
create_listen()
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim tmp As String = ""
Dim path As String = "C:\Users\" & Environment.UserName & "\Desktop\手机扫码枪记录.txt"
Dim i As Integer = 0
While i < get_list.Items.Count
tmp += get_list.Items(i) + vbCrLf
i += 1
End While
Dim sw As New StreamWriter(path)
sw.Write(tmp)
sw.Flush()
sw.Close()
MessageBox.Show("记录导出成功!" & vbCrLf & "保存路径: " & path, "手机扫码枪")
End Sub
End Class