获取当前连接的用户到控制台服务器 [英] Get current connected users to console server

查看:76
本文介绍了获取当前连接的用户到控制台服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用我在网上找到的这个代码,但我似乎无法获得当前连接用户的列表。第一个连接的客户端将显示所有在其后连接的用户,但之后的任何客户端将仅显示在其后连接的用户。我希望任何连接的用户都能获得当前连接用户的列表。



服务器

  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

结束
结束 模块



客户

<前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)句柄 Button1.Click
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 + \"


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.

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 + "


这篇关于获取当前连接的用户到控制台服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆