Все запутался по полной...
(( Выручайте:
----сервер-----
- Код: Выделить всё
Option Explicit
'используем локальны порт с номером 12345
Private Const WSK_LOCAL_PORT = 12345 ' для приема текстовых сообщений
Private Const WSK_Name_port = 12346 ' для приема имен юзеров
'максимальное кол-во одновреммено открытых сеансов
Private Const MAX_SESSIONS = 11
Private Sub UpdateStatus()
Dim i As Integer
Dim actsess As Integer
For i = 1 To MAX_SESSIONS
With wsk(i)
If .State = sckConnected Then
actsess = actsess + 1
End If
End With
Next
With lbStatus
.Caption = "Занятые сеансы: " & Trim$(Str$(actsess))
End With
End Sub
Private Sub Form_Load()
Dim i As Integer
' задаем параметры винсока
With wsk(0)
' устанавливаем TCP протокол
.Protocol = sckTCPProtocol
' определяем локальный порт
.LocalPort = WSK_LOCAL_PORT
' вызываем метод listen
.Listen
End With
' задаем параметры винсока
' загружаем еще 10 элементов винсока, т.к. max_sessions = 11 (-1)
For i = 1 To MAX_SESSIONS
Load wsk(i)
wsk(i).Protocol = sckTCPProtocol
wsk(i).LocalPort = WSK_LOCAL_PORT
Next
UpdateStatus
End Sub
Private Sub lbClearList_Click()
lstMessages.Clear
End Sub
Private Sub LocalIPServer_Click()
Dim i As Integer
MsgBox wsk(i).LocalIP, , "IP"
End Sub
Private Sub mnuFileExit_Click()
Unload Me
End Sub
Private Sub tmrTimer_Timer()
UpdateStatus
End Sub
Private Sub wsk_Close(Index As Integer)
UpdateStatus
End Sub
Private Sub wsk_Connect(Index As Integer)
UpdateStatus
End Sub
Private Sub wsk_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim msg As String
Dim i As Integer
' если это прослушивающий порт (index=0) then....
If Index = 0 Then
' ищем открытый сеанс
For i = 1 To MAX_SESSIONS
With wsk(i)
If .State = sckClosed Then
' подключится к сеансу
.Accept requestID
Exit For
End If
End With
Next
End If
End Sub
Private Sub wsk_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim msg As String
Dim i As Integer
' получить сообщение и занести его всписок
wsk(Index).GetData msg, , bytesTotal
lstMessages.AddItem msg
' передать сообщение другим клиентам
For i = 1 To MAX_SESSIONS ' max_session = 10
If wsk(i).State = sckConnected Then
' передать сообщение текущему клиенту
wsk(i).SendData msg
' подождать, пока сообщение будет доставлено
DoEvents
End If
Next
'End If
End Sub
------------Клиент-------------
Form1
- Код: Выделить всё
Option Explicit
Private Sub Form_Load()
txtRx.Enabled = False
txtTx.Enabled = False
txtName.Enabled = False
End Sub
Private Sub Label3_Click()
frmIPconfig.Show
txtName.Enabled = True
End Sub
Private Sub lbBlue_Click()
With txtTx
.ForeColor = vbBlue
End With
End Sub
Private Sub Label4_Click()
frmRisovalka.Show
End Sub
Private Sub txtName_KeyPress(KeyAscii As Integer)
If (KeyAscii = 13) And (txtName.Text <> "") Then
txtName.Enabled = False
txtRx.Enabled = True
txtTx.Enabled = True
txtTx.SetFocus
'Clientname = txtName.Text
'wsk(2).SendData Clientname
End If
End Sub
Private Sub txtTx_KeyPress(KeyAscii As Integer)
Dim myTime As String
myTime = Time
Dim msg As String
' когда юзер нажимает Enter
If (KeyAscii = 13) And (txtTx.Text = "") Then
MsgBox "Не введен текст!", , "Ошибка"
' когда юзер нажимает Enter и текст. окно не пустое
ElseIf (KeyAscii = 13) And (wsk([b]0[/b]).State = sckConnected) Then
' включит в сообщение текущее время и имя отправителя
msg = UCase$(myTime) & " " & "[" & Trim$(txtName.Text) & "]- " & txtTx.Text
' отправляем сообщение
wsk([b]0[/b]).SendData msg
' очищаем текстовое окно
txtTx.Text = ""
End If
End Sub
Private Sub wsk_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim msg As String
' получить сообщение из буфера
wsk([b]0[/b]).GetData msg, , bytesTotal
' вывести его в текстовом окне
With txtRx
.Text = msg & vbCrLf & .Text
End With
End Sub
frmIpConfig
- Код: Выделить всё
Option Explicit
Private Sub Label4_Click()
Dim IPAdress1
IPAdress1 = txtIPAdress.Text
' подключаемся к серверу
With Form1.wsk(0)
.Protocol = sckTCPProtocol
.RemoteHost = IPAdress1
.RemotePort = 12345
.Connect
End With
'Dim i As Integer
'For i = 1 To 3
'Load Form1.wsk(i)
'Next
'With Form1.wsk(1)
'.Protocol = sckTCPProtocol
'.RemoteHost = IPAdress1
'.RemotePort = 12346
'.Connect
'End With
IPAdress = IPAdress1
Unload Me
End Sub
Private Sub txtIPAdress_KeyPress(KeyAscii As Integer)
If (KeyAscii = 13) And (txtIPAdress.Text <> "") Then Label4_Click
End Sub
Проблема в том, что я пытаюсь создать массив винсоков:
- Код: Выделить всё
'Dim i As Integer
'For i = 1 To 3
'Load Form1.wsk(i)
'Next
затем прирубить его к порту 12346:
- Код: Выделить всё
'With Form1.wsk(1)
'.Protocol = sckTCPProtocol
'.RemoteHost = IPAdress1
'.RemotePort = 12346
'.Connect
'End With
и работать как бы на 2 портах 12345 и 12346
т.е. по порту 12345 отсылаются просто сообщения а по 12346 отсылаются имена пользователя.
И вообщем ничего неработает
((
Жду Help!