Страница: 1 |
Страница: 1 |
Вопрос: прошу помоч ч чатом =)
Добавлено: 11.08.10 03:21
Автор вопроса: kol | Web-сайт:
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-сайт:
Профиль | | #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
Номер ответа: 4
Автор ответа:
kol
ICQ: Skype: abc barman
Вопросов: 3
Ответов: 17
Web-сайт:
Профиль | | #4
Добавлено: 11.08.10 12:49
ну он же бесконечным должен быть)
Номер ответа: 5
Автор ответа:
kol
ICQ: Skype: abc barman
Вопросов: 3
Ответов: 17
Web-сайт:
Профиль | | #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, молодец что заметил
Вот рассово верный бесконечный цикл
Номер ответа: 8
Автор ответа:
kol
ICQ: Skype: abc barman
Вопросов: 3
Ответов: 17
Web-сайт:
Профиль | | #8
Добавлено: 10.10.10 00:31
Я разобрался! Спс вам, профи) там ксать через массив можно в 100 раз проше сделать , не набирать хэштэйбл а тупо замассивить TCP - клиентов. Пока разобрался >4 месяцев) выучил столько нового) Ещё раз спс вам, профи)
Номер ответа: 9
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #9
Добавлено: 10.10.10 09:38