获取当前连接的用户到控制台服务器 [英] Get current connected users to console server
问题描述
我正在使用我在网上找到的这个代码,但我似乎无法获得当前连接用户的列表。第一个连接的客户端将显示所有在其后连接的用户,但之后的任何客户端将仅显示在其后连接的用户。我希望任何连接的用户都能获得当前连接用户的列表。
服务器
Imports System.Net.Sockets
Imports System.Text
Imports System.Windows.Forms
Module Module1
Dim clientsList As 新 Hashtable
Sub Main()
Dim frm As 新 frmServer
frm.Show()
Dim serverSocket As 新 TcpListener( 8888 )
Dim clientSocket As TcpClient
Dim counter As 整数
serverSocket.Start()
msg( Chat Server Started ....)
counter = 0
while ( True )
counter + = 1
clientSocket = serverSocket.AcceptTcpClient()
Dim bytesFrom( 10024 )< span class =code-keyword>作为 字节
Dim dataFromClient < span class =code-keyword> As String
Dim n etworkStream As NetworkStream = _
clientSocket.GetStream()
networkStream.Read(bytesFrom, 0 , CInt (clientSocket.ReceiveBufferSize))
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
dataFromClient = _
dataFromClient.Substring( 0 ,dataFromClient.IndexOf( $))
clientsList(dataFromClient)= clientSocket
broadcast(dataFromClient + 已加入,dataFromClient, False )
msg(dataFromClient + 已加入聊天室)
Dim client <跨度lass =code-keyword> As 新 handleClinet
client.startClient(clientSocket,dataFromClient,clientsList)
结束 while
clientSocket.Close()
serverSocket。停止()
msg( 退出)
Console.ReadLine()
结束 Sub
Sub msg( ByVal mesg As 字符串)
mesg.Trim()
Console.WriteLine(mesg)
结束 Sub
Sub msg1( ByVal mesg As String )
mesg.Trim()
Console.WriteLine(mesg)
结束 Sub
私人 子广播( ByVal msg As 字符串,_
ByVal uName 正如 字符串, ByVal 标志 As 布尔)
Dim 项 As DictionaryEntry
对于 每个项在 clientsList
Dim broadcastSocket As TcpClient
broadcastSocket = CType (Item.Value ,TcpClient)
Dim broadcastStream As NetworkStream = _
broadcastSocket.GetStream()
Dim broadcastBytes 作为 [字节]()
如果 flag = True 然后
broadcastBytes = Encoding.ASCII.GetBytes(uName + 说: + msg)
否则
broadcastBytes = Encoding.ASCII.GetBytes(msg)
结束 如果
broadcastStream.Write(broadcastBytes, 0 ,broadcastBytes.Length)
broadcastStream.Flush()
下一步
结束 Sub
公开 类 handleClinet
Dim clientSocket 作为 TcpClient
Dim clNo As String
Dim clientsList As Hashtable
公共 Sub startClient ( ByVal inClientSocket As TcpClient,_
ByVal clineNo 作为 字符串, ByVal cList As Hashtable)
我。 clientSocket = inClientSocket
Me .clNo = clineNo
Me .clientsList = cList
Dim ctThread As Threading.Thread = New Threading.Thread( AddressOf doChat)
ctThread.Start()
End Sub
私有 Sub doChat()
' Dim infiniteCo unter As Integer
Dim requestCount As 整数
Dim bytesFrom( 10024 )作为 字节
Dim dataFromClient 作为 字符串
Dim sendBytes 作为 [字节]()
Dim serverResponse As String
Dim rCount 作为 字符串
requestCount = 0
( True )
尝试
requestCount = requestCount + 1
Dim networkStream As NetworkStream = _
clientSocket.GetStream()
networkStream.Read(bytesFrom, 0 , CInt (clientSocket.ReceiveBufferSize))
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
dataFromClient = _
dataFromClient.Substring( 0 ,dataFromClient.IndexOf( $))
msg( Fro m客户端 - + clNo + : + dataFromClient)
rCount = Convert.ToString(requestCount)
broadcast(dataFromClient,clNo, True )
Catch ex As 异常
MsgBox(ex.ToString)
结束 尝试
结束 while
结束 Sub
结束 类
结束 模块
I am using this code I found online but I cannot seem to get a list of currently connected users. The first connected client will show all users who connect after them but any client after that will only show users who connect after them. I want any user who connects to get a list of currently connected users. 这篇关于获取当前连接的用户到控制台服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
客户
<前lang =vb> 进口系统.Net.Sockets
Imports System.Text
Public Class Form1
Dim clientSocket As 新 System.Net.Sockets.TcpClient()
Dim serverStream 正如 NetworkStream
Dim readData As 字符串
Dim infiniteCounter 作为 整数
私有 Sub msg()
如果 我 .InvokeRequired 那么
我 .Invoke(新 MethodInvoker( AddressOf msg))
其他
TextBox1.Text = TextBox1.Text + Environment.NewLine + readData
结束 如果
结束 Sub
私有 Sub msg1()
如果 Me .InvokeRequired 那么
Me .Invoke( New MethodInvoker( AddressOf msg1))
Else
TextBox4.AppendText(Environment.NewLine + readData)
End 如果
结束 Sub
私有 Sub Button2_Click( ByVal sender As System。 Object ,_
< span class =code-keyword> ByVal e As System.EventArgs)句柄 Button2 .Click
readData = Conected to Chat Server ...
msg ()
clientSocket.Connect( 10.228.144.124, 8888 )
' Label1.Text =客户端套接字程序 - 服务器已连接...
serverStr eam = clientSocket.GetStream()
Dim outStream As Byte ()= _
System.Text.Encoding.ASCII.GetBytes(TextBox3.Text + $)
serverStream.Write(outStream, 0 ,outStream.Length)
serverStream .Flush()
Dim ctThread As Threading.Thread = _
新 Threading.Thread( AddressOf getMessage)
ctThread.Start()
' Me.ListView1.Items.Add(Me.TextBox3.Text)
结束 Sub
私有 Sub getMessage()
对于 infiniteCounter = 1 < span class =code-keyword> To 2
infiniteCounter = 1
serverStream = clientSocket.GetStream()
Dim buffSize As 整数
Dim inStream( 10024 ) As Byte
buffSize = clientSocket.ReceiveBufferSize
serverStream.Read(inStream, 0 ,buffSize)
Dim returndata As 字符串 = _
System.Text.Encoding.ASCII.Ge tString(inStream)
readData = + returndata
如果 readData.Contains( 已加入)然后
msg1()
其他
msg()
< span class =code-keyword>结束 如果
下一步
结束 Sub
私人 Sub Button1_Click_1( ByVal sender As 系统。对象, ByVal e As System.EventArgs)
Dim outStream As Byte ()= _
System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + $)
serverStream.Write(outStream, 0 ,outStream.Length )
serverStream.Flush()
Me .TextBox2.Text = < span class =code-string>
结束 Sub
结束 类 ))
clientsList(dataFromClient)= clientSocket
broadcast(dataFromClient + 跨度> <跨度class =code-string>已加入,dataFromClient, False )
msg(dataFromClient + 已加入聊天室)
Dim client As 新 handleClinet
client.startClient(clientSocket,dataFromClient,clientsList)
结束 当
clientSocket.Close()
serverSocket。停止()
msg( 退出)
控制台。 ReadLine()
结束 Sub
Sub msg( ByVal mesg As 字符串)
mesg.Trim()
Console.WriteLine(mesg)
结束 Sub
Sub msg1( ByVal mesg As String )
mesg.Trim()
Console.WriteLine(mesg)
结束 Sub
私有 子广播( ByVal msg 作为 字符串,_
ByVal uName 作为 字符串, ByVal 标志作为 布尔)
Dim 项 As DictionaryEntry
For 每个项在 clientsList
Dim broadcastSocket As TcpClient
broadcastSocket = CType (Item.Value,TcpClient)
Dim broadcastStream As NetworkStream = _
broadcastSocket.GetStream()
< span class =code-keyword> Dim broadcastBytes As [ Byte ]()
如果 flag = True 那么
broadcastBytes = Encoding.ASCII.GetByte s(uName + 说: + msg)
否则
broadcastBytes = Encoding.ASCII.GetBytes(msg)
结束 如果
broadcastStream.Write(broadcastBytes, 0 ,broadcastBytes.Length)
broadcastStream.Flush()
< span class =code-keyword>下一步
结束 Sub
公开 类 handleClinet
Dim clientSocket As TcpClient
Dim clNo 作为 字符串
Dim clientsList As Hashtable
公共 Sub startClient( ByVal inClientSocket As TcpClient,_
ByVal clineNo 作为 字符串, ByVal cList As Hashtable)
Me .clientSocket = inClientSocket
我 .clNo = clineNo
我 .clientsList = cList
Dim ctThread As Threading.Thread = 新 Threading.Thread( AddressOf doChat)
ctThread.Start()
结束 Sub
私有 Sub doChat()
' Dim infiniteCounter As Integer
Dim requestCount As 整数
Dim bytesFrom( 10024 )< span class =code-keyword>作为 字节
Dim dataFromClient < span class =code-keyword> As String
Dim sendBytes < span class =code-keyword> As [ Byte ]()
Dim serverResp onse 作为 字符串
Dim rCount 作为 字符串
requestCount = 0
while ( True )
尝试
requestCount = requestCount + 1
Dim networkStream As NetworkStream = _
clientSocket.GetStream()
networkStream.Read(bytesFrom, 0 , CInt (clientSocket.ReceiveBufferSize))
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
dataFromClient = _
dataFromClient.Substring( 0 ,dataFromClient.IndexOf(
))
msg( 来自客户端 - + clNo + : + dataFromClient)
rCount = Convert.ToString(requestCount)
broadcast(dataFromClient,clNo, True )
Catch ex As 异常
MsgBox(ex.ToString)
结束 尝试
结束 虽然
结束 Sub
结束 类
结束 模块
客户
Imports System.Net.Sockets
Imports System.Text
公共 类 Form1
Dim clientSocket As 新系统。 Net.Sockets.TcpClient()
Dim serverStream As NetworkStream
Dim readData 作为 字符串
Dim infiniteCounter As 整数
私有 Sub msg()
如果 我 .InvokeRequired 然后
我 .Invoke(新 MethodInvoker( AddressOf msg))
否则
TextBox1.Text = TextBox1.Text + Environment.NewLine + readData
结束 如果
结束 Sub
私有 Sub msg1()
如果 我 .InvokeRequired 然后
Me .Invoke( New MethodInvoker( AddressOf msg1))
其他
TextBox4.AppendText(Environment.NewLine + readData)
结束 如果
结束 Sub
私有 Sub Button2_Click( ByVal sender As System。 Object ,_
ByVal e As System.EventArgs) Handles Button2.Click
readData = Conected to Chat Server ...
msg()
clientSocket.Connect( 10.228.144.124, 8888 )
' Label1.Text =客户端套接字程序 - 服务器已连接...
serverStream = clientSocket.GetStream()
Dim outStream 正如 Byte ()= _
System.Text.Encoding.ASCII.GetBytes(TextBox3.Text +
)
serverStream.Write(outStream, 0 ,outStream.Length)
serverStream.Flush()
Dim ctThread As Threading.Thread = _
新 Threading.Thread( AddressOf getMessage)
ctThread.Start()
' 我。 ListView1.Items.Add(Me.TextBox3.Text)
结束 Sub
私有 Sub getMessage()
对于 infiniteCounter = 1 到 2
infiniteCounter = 1
serverStream = clientSocket.GetStream()
Dim buffSize As Integer
Dim inStream(10024) As Byte
buffSize = clientSocket.ReceiveBufferSize
serverStream.Read(inStream, 0, buffSize)
Dim returndata As String = _
System.Text.Encoding.ASCII.GetString(inStream)
readData = \"\" + returndata
If readData.Contains(\"Joined\") Then
msg1()
Else
msg()
End If
Next
End Sub
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim outStream As Byte() = _
System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + \"
Server
Imports System.Net.Sockets
Imports System.Text
Imports System.Windows.Forms
Module Module1
Dim clientsList As New Hashtable
Sub Main()
Dim frm As New frmServer
frm.Show()
Dim serverSocket As New TcpListener(8888)
Dim clientSocket As TcpClient
Dim counter As Integer
serverSocket.Start()
msg("Chat Server Started ....")
counter = 0
While (True)
counter += 1
clientSocket = serverSocket.AcceptTcpClient()
Dim bytesFrom(10024) As Byte
Dim dataFromClient As String
Dim networkStream As NetworkStream = _
clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
dataFromClient = _
dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
clientsList(dataFromClient) = clientSocket
broadcast(dataFromClient + " Joined ", dataFromClient, False)
msg(dataFromClient + " Joined chat room ")
Dim client As New handleClinet
client.startClient(clientSocket, dataFromClient, clientsList)
End While
clientSocket.Close()
serverSocket.Stop()
msg("exit")
Console.ReadLine()
End Sub
Sub msg(ByVal mesg As String)
mesg.Trim()
Console.WriteLine(mesg)
End Sub
Sub msg1(ByVal mesg As String)
mesg.Trim()
Console.WriteLine(mesg)
End Sub
Private Sub broadcast(ByVal msg As String, _
ByVal uName As String, ByVal flag As Boolean)
Dim Item As DictionaryEntry
For Each Item In clientsList
Dim broadcastSocket As TcpClient
broadcastSocket = CType(Item.Value, TcpClient)
Dim broadcastStream As NetworkStream = _
broadcastSocket.GetStream()
Dim broadcastBytes As [Byte]()
If flag = True Then
broadcastBytes = Encoding.ASCII.GetBytes(uName + " says : " + msg)
Else
broadcastBytes = Encoding.ASCII.GetBytes(msg)
End If
broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length)
broadcastStream.Flush()
Next
End Sub
Public Class handleClinet
Dim clientSocket As TcpClient
Dim clNo As String
Dim clientsList As Hashtable
Public Sub startClient(ByVal inClientSocket As TcpClient, _
ByVal clineNo As String, ByVal cList As Hashtable)
Me.clientSocket = inClientSocket
Me.clNo = clineNo
Me.clientsList = cList
Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
ctThread.Start()
End Sub
Private Sub doChat()
'Dim infiniteCounter As Integer
Dim requestCount As Integer
Dim bytesFrom(10024) As Byte
Dim dataFromClient As String
Dim sendBytes As [Byte]()
Dim serverResponse As String
Dim rCount As String
requestCount = 0
While (True)
Try
requestCount = requestCount + 1
Dim networkStream As NetworkStream = _
clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
dataFromClient = _
dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
msg("From client - " + clNo + " : " + dataFromClient)
rCount = Convert.ToString(requestCount)
broadcast(dataFromClient, clNo, True)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End While
End Sub
End Class
End Module
Client
Imports System.Net.Sockets
Imports System.Text
Public Class Form1
Dim clientSocket As New System.Net.Sockets.TcpClient()
Dim serverStream As NetworkStream
Dim readData As String
Dim infiniteCounter As Integer
Private Sub msg()
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf msg))
Else
TextBox1.Text = TextBox1.Text + Environment.NewLine + readData
End If
End Sub
Private Sub msg1()
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf msg1))
Else
TextBox4.AppendText(Environment.NewLine + readData)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
readData = "Conected to Chat Server ..."
msg()
clientSocket.Connect("10.228.144.124", 8888)
'Label1.Text = "Client Socket Program - Server Connected ..."
serverStream = clientSocket.GetStream()
Dim outStream As Byte() = _
System.Text.Encoding.ASCII.GetBytes(TextBox3.Text + "$")
serverStream.Write(outStream, 0, outStream.Length)
serverStream.Flush()
Dim ctThread As Threading.Thread = _
New Threading.Thread(AddressOf getMessage)
ctThread.Start()
'Me.ListView1.Items.Add(Me.TextBox3.Text)
End Sub
Private Sub getMessage()
For infiniteCounter = 1 To 2
infiniteCounter = 1
serverStream = clientSocket.GetStream()
Dim buffSize As Integer
Dim inStream(10024) As Byte
buffSize = clientSocket.ReceiveBufferSize
serverStream.Read(inStream, 0, buffSize)
Dim returndata As String = _
System.Text.Encoding.ASCII.GetString(inStream)
readData = "" + returndata
If readData.Contains("Joined") Then
msg1()
Else
msg()
End If
Next
End Sub
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim outStream As Byte() = _
System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + "$")
serverStream.Write(outStream, 0, outStream.Length)
serverStream.Flush()
Me.TextBox2.Text = ""
End Sub
End Class
"))
clientsList(dataFromClient) = clientSocket
broadcast(dataFromClient + " Joined ", dataFromClient, False)
msg(dataFromClient + " Joined chat room ")
Dim client As New handleClinet
client.startClient(clientSocket, dataFromClient, clientsList)
End While
clientSocket.Close()
serverSocket.Stop()
msg("exit")
Console.ReadLine()
End Sub
Sub msg(ByVal mesg As String)
mesg.Trim()
Console.WriteLine(mesg)
End Sub
Sub msg1(ByVal mesg As String)
mesg.Trim()
Console.WriteLine(mesg)
End Sub
Private Sub broadcast(ByVal msg As String, _
ByVal uName As String, ByVal flag As Boolean)
Dim Item As DictionaryEntry
For Each Item In clientsList
Dim broadcastSocket As TcpClient
broadcastSocket = CType(Item.Value, TcpClient)
Dim broadcastStream As NetworkStream = _
broadcastSocket.GetStream()
Dim broadcastBytes As [Byte]()
If flag = True Then
broadcastBytes = Encoding.ASCII.GetBytes(uName + " says : " + msg)
Else
broadcastBytes = Encoding.ASCII.GetBytes(msg)
End If
broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length)
broadcastStream.Flush()
Next
End Sub
Public Class handleClinet
Dim clientSocket As TcpClient
Dim clNo As String
Dim clientsList As Hashtable
Public Sub startClient(ByVal inClientSocket As TcpClient, _
ByVal clineNo As String, ByVal cList As Hashtable)
Me.clientSocket = inClientSocket
Me.clNo = clineNo
Me.clientsList = cList
Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
ctThread.Start()
End Sub
Private Sub doChat()
'Dim infiniteCounter As Integer
Dim requestCount As Integer
Dim bytesFrom(10024) As Byte
Dim dataFromClient As String
Dim sendBytes As [Byte]()
Dim serverResponse As String
Dim rCount As String
requestCount = 0
While (True)
Try
requestCount = requestCount + 1
Dim networkStream As NetworkStream = _
clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
dataFromClient = _
dataFromClient.Substring(0, dataFromClient.IndexOf("
"))
msg("From client - " + clNo + " : " + dataFromClient)
rCount = Convert.ToString(requestCount)
broadcast(dataFromClient, clNo, True)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End While
End Sub
End Class
End Module
Client
Imports System.Net.Sockets
Imports System.Text
Public Class Form1
Dim clientSocket As New System.Net.Sockets.TcpClient()
Dim serverStream As NetworkStream
Dim readData As String
Dim infiniteCounter As Integer
Private Sub msg()
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf msg))
Else
TextBox1.Text = TextBox1.Text + Environment.NewLine + readData
End If
End Sub
Private Sub msg1()
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf msg1))
Else
TextBox4.AppendText(Environment.NewLine + readData)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
readData = "Conected to Chat Server ..."
msg()
clientSocket.Connect("10.228.144.124", 8888)
'Label1.Text = "Client Socket Program - Server Connected ..."
serverStream = clientSocket.GetStream()
Dim outStream As Byte() = _
System.Text.Encoding.ASCII.GetBytes(TextBox3.Text + "
")
serverStream.Write(outStream, 0, outStream.Length)
serverStream.Flush()
Dim ctThread As Threading.Thread = _
New Threading.Thread(AddressOf getMessage)
ctThread.Start()
'Me.ListView1.Items.Add(Me.TextBox3.Text)
End Sub
Private Sub getMessage()
For infiniteCounter = 1 To 2
infiniteCounter = 1
serverStream = clientSocket.GetStream()
Dim buffSize As Integer
Dim inStream(10024) As Byte
buffSize = clientSocket.ReceiveBufferSize
serverStream.Read(inStream, 0, buffSize)
Dim returndata As String = _
System.Text.Encoding.ASCII.GetString(inStream)
readData = "" + returndata
If readData.Contains("Joined") Then
msg1()
Else
msg()
End If
Next
End Sub
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim outStream As Byte() = _
System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + "