Вопрос № 41740: Здравствуйте.
Помогите создать программу вида клиент сервер. Программа чат. Чтоб по Интернету мы с другом разговаривать могли, он вводит мой IP и порт (я сервер), и мы разговариваем.
Вот некоторые разработки:
Со стороны сервер я сде...
Вопрос № 41.740
Здравствуйте.
Помогите создать программу вида клиент сервер. Программа чат. Чтоб по Интернету мы с другом разговаривать могли, он вводит мой IP и порт (я сервер), и мы разговариваем.
Вот некоторые разработки:
Со стороны сервер я сделал следующее: добавил Winsock1
И ввёл код:
Private Sub Form_Load()
Winsock1.Listen
End Sub
Но, нужно чтоб все пришедшие данные выводились в Text1Box (так как он мне будет что-либо писать), и назначить определенный порт, по которому товарищ будет подключаться.
Со стороны клиента:
Private Sub Command1_Click()
Winsock1.RemoteHost = Text1.Text
Winsock1.RemotePort = Text2.Text
Winsock1.Connect
End Sub
Наверное данные нужно отправлять из Text3.Text (в Text3.Text сообщение которое он мне отправляет) серверу, примерно так:
Private Sub Command2_Click()
Dim a As Variant
a = Text3.Text
Winsock1.SendData a
End Sub
<hr>
Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Неизвестнов Том!
Попробовал сделать.
Клиентская часть:
Создаем форму, называем frmClient, помещаем на форму объект WinSock под именем tcpClient, два TextBox :Text1 и Text2 - соответственно IP адрес и порт компьютера, к которому надо подключиться (можно сразу заполнить нужными значениями), под ними кнопку под именем cmdConnect, ниже два TextBox : txtSendData - передаваемые данные и txtOutput (свойство Enabled = False) - принимаемые данные.
В код формы заносим:
Private Sub cmdConnect_Click()
' Устанавливаем параметры соединения
tcpClient.RemoteHost = frmClient.Text1
tcpClient.RemotePort = frmClient.Text2
'Устанавливаем соединение
tcpClient.Connect
cmdConnect.Caption = "Связь установлена"
cmdConnect.Font.Bold = True
cmdConnect.BackColor = &HFFFF&
'Чтобы увидеть, что включена связь
End Sub
Private Sub txtSendData_Change()
'Сначала проверяем, что соединение не закрыто, потом передаем данные
If tcpClient.State <> sckClosing Then
tcpClient.SendData txtSendData.Text
Else
MsgBox ("Связь потеряна")
End
End If
End Sub
Private Sub tcpClient_DataArrival (ByVal bytesTotal As Long)
Dim strData As String
If tcpClient.State <> sckClosing Then
'Выводим принятые данные
tcpClient.GetData strData
txtOutput.Text = strData
Else
MsgBox ("Связь потеряна")
End
End If
End Sub
Серверная часть:
Создаем форму, называем frmServer, помещаем на форму объект WinSock под именем tcpServer, Text3 - порт сервера (нужно сразу заполнить нужным значением, т.к. сразу используется при запуске программы), ниже два TextBox : txtSendData - передаваемые данные и txtOutput (свойство Enabled = False) - принимаемые данные.
В код формы заносим:
Private Sub Form_Load()
'Устанавливаем порт на прослушивание
tcpServer.LocalPort = frmServer.Text3
tcpServer.Listen
End Sub
Private Sub tcpServer_ConnectionRequest (ByVal requestID As Long)
'После получения запроса на установление связи перед принятием данных закрываем прослушивание и открываем связь
If tcpServer.State <> sckClosed Then
tcpServer.Close
End If
tcpServer.Accept requestID
End Sub
Private Sub txtSendData_Change()
If tcpServer.State <> sckClosing Then
tcpServer.SendData txtSendData.Text
Else
MsgBox ("Connect terminated")
End
End If
End Sub
Private Sub tcpServer_DataArrival (ByVal bytesTotal As Long)
Dim strData As String
If tcpServer.State <> sckClosing Then
tcpServer.GetData strData
txtOutput.Text = strData
Else
MsgBox ("Connect terminated")
End
End If
End Sub
На другой машине устанавливается клиентская часть (Client.exe). На сервере запускается программа, после этого можно запустить клиентскую и нажать кнопку "Установить связь". В верхний TextBox вводятся данные, которые отображаются в нижнем у оппонента. Единственная проблема - сервер запускается только под VB (компилю и запускаю Server.exe - вылетает ошибка, хотя в оболочке работает нормально). Может у Вас получиться исправить. По крайней мере, связь работает.