Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: прошу помоч ч чатом =) Добавлено: 11.08.10 03:21  

Автор вопроса:  kol | Web-сайт: q-cs.narod.ru | ICQ: Skype: abc barman 

Imports System.Text
Module Module1
    Dim _HASHTABLE As New Hashtable
    Sub Main()
        Dim listner As New System.Net.Sockets.TcpListener(8888)
        Dim tcpCLIent As TcpClient
        Dim infiniteCounter As Integer
        Dim counter As Integer

        listner.Start()
        msg("Chat Server Started ....")
        counter = 0
        infiniteCounter = 0
        For infiniteCounter = 1 To 2
            infiniteCounter = 1
            counter = 1
            tcpCLIent = listner.AcceptTcpClient()

            Dim bytesFrom(10024) As Byte
            Dim dataFromClient As String

            Dim networkStream As NetworkStream = tcpCLIent.GetStream()
            networkStream.Read(bytesFrom, 0, CInt(tcpCLIent.ReceiveBufferSize))
            dataFromClient = System.Text.Encoding.Unicode.GetString(bytesFrom)
            dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"))

            _HASHTABLE(dataFromClient) = tcpCLIent

            broadcast(dataFromClient + " Соединён ", dataFromClient, False)

            msg(dataFromClient + " Присоединился ")
            Dim client As New handleClinet
            client.startClient(tcpCLIent, dataFromClient, _HASHTABLE)
        Next

        tcpCLIent.Close()
        listner.Stop()
        msg("exit")
        Console.ReadLine()
    End Sub

    Sub msg(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 _HASHTABLE
            Dim BSocket As TcpClient
            BSocket = CType(Item.Value, TcpClient)
            Dim BStream As NetworkStream = BSocket.GetStream()
            Dim BBytes As [Byte]()
            If flag = True Then
                BBytes = Encoding.Unicode.GetBytes(uName & " says : " & msg)
            Else
                BBytes = Encoding.Unicode.GetBytes(msg)
            End If

            BStream.Write(BBytes, 0, BBytes.Length)
            BStream.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)
            clientSocket = inClientSocket
            clNo = clineNo
            clientsList = cList
            Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
            ctThread.Start()
            Dim a As Byte
            a = 4
        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
            For infiniteCounter = 1 To 2
                infiniteCounter = 1
                Try
                    requestCount = requestCount + 1
                    Dim networkStream As NetworkStream = clientSocket.GetStream()
                    networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
                    dataFromClient = System.Text.Encoding.Unicode.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
            Next
        End Sub
    End Class
End Module

============================
народ, подскажите, что даёт фун-ция CType "BSocket = CType(Item.Value, TcpClient)" а то я голову сломал читая чё написано на MSDN

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 11.08.10 06:05
Кастует значение в хэш-таблице к TcpClient, вестимо

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 11.08.10 09:39
Лучше переделать на Dictionary, не нужно будет явные приведения делать

Ответить

Номер ответа: 3
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #3 Добавлено: 11.08.10 10:08
  1. For infiniteCounter = 1 To 2
  2.     infiniteCounter = 1
  3. Next
Вот так нынче называется Do..Loop ?

Ответить

Номер ответа: 4
Автор ответа:
 kol



ICQ: Skype: abc barman 

Вопросов: 3
Ответов: 17
 Web-сайт: q-cs.narod.ru
 Профиль | | #4
Добавлено: 11.08.10 12:49
ну он же бесконечным должен быть)

Ответить

Номер ответа: 5
Автор ответа:
 kol



ICQ: Skype: abc barman 

Вопросов: 3
Ответов: 17
 Web-сайт: q-cs.narod.ru
 Профиль | | #5
Добавлено: 11.08.10 12:51
и разницы в принципе никакой

Ответить

Номер ответа: 6
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #6 Добавлено: 11.08.10 13:43
разве что в том, что ты юзаешь в 10 раз больше кода? %)

Ответить

Номер ответа: 7
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 11.08.10 14:07
AgentFire, молодец что заметил :)

Вот рассово верный бесконечный цикл
  1. Do
  2.     
  3. Loop

Ответить

Номер ответа: 8
Автор ответа:
 kol



ICQ: Skype: abc barman 

Вопросов: 3
Ответов: 17
 Web-сайт: q-cs.narod.ru
 Профиль | | #8
Добавлено: 10.10.10 00:31
Я разобрался! Спс вам, профи) там ксать через массив можно в 100 раз проше сделать =), не набирать хэштэйбл а тупо замассивить TCP - клиентов. Пока разобрался >4 месяцев) выучил столько нового) Ещё раз спс вам, профи)

Ответить

Номер ответа: 9
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #9 Добавлено: 10.10.10 09:38
\m/

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам