Прои именнованные каналы посмотри на rsdn.ru, сам работать не пробовал, но это, вроде, легче чем winsock...
Насчет твоей проблемы мне пока не ясно в чем дело... я писал клиент-серверные приложения и с использованием winsock.ocx и c использованием winsock api, но проблем не встречал...
У меня сейчас сессия и очень мало времени, может на выходных подумаю над решением твоей проблемы...
Не знаю точного ответа, я не разбирался с кодом, но думаю,чт опроблема в пересылке числа + 1. Очень уж маленький шаг увеличения!И, конечно, большая нагрузка на сеть, но при твоих 100 мбит ето не заметно, а главное припадает на проц. Ведь при 100 мбит получаеться цикл клиента и сервера, отсюда, я думаю, и большая загрузка проца. Посмотри ещё на расход памяти, если он маленький, то мое мнение правда, если ще большой, то ето или код твой паршивый или Visual Basic глючит. П. С. какие активиксы?Активиксы выполняються в отдельном потоку, что ещё больше загружает проц и замедляет скорость. АПИ выполняються в одном потоку с приложением, рекомендую юзать именно их.
Возможна ли одновременная работа в одной программе двух Winsock, один работает на приём сообщений (так сказать в режиме ожидания сообщений), а второй - на отправку сообщений ?
Ответ:
А что тебе мешает?
Вот выдержка из MSDN (благополучно работают два сокета):
To create a TCP server
Create a new Standard EXE project.
Change the name of the default form to frmServer.
Change the caption of the form to "TCP Server."
Draw a Winsock control on the form and change its name to tcpServer.
Add two TextBox controls to the form. Name the first txtSendData, and the second txtOutput.
Add the code below to the form.
Private Sub Form_Load()
' Set the LocalPort property to an integer.
' Then invoke the Listen method.
tcpServer.LocalPort = 1001
tcpServer.Listen
frmClient.Show ' Show the client form.
End Sub
Private Sub tcpServer_ConnectionRequest _
(ByVal requestID As Long)
' Check if the control's State is closed. If not,
' close the connection before accepting the new
' connection.
If tcpServer.State <> sckClosed Then _
tcpServer.Close
' Accept the request with the requestID
' parameter.
tcpServer.Accept requestID
End Sub
Private Sub txtSendData_Change()
' The TextBox control named txtSendData
' contains the data to be sent. Whenever the user
' types into the textbox, the string is sent
' using the SendData method.
tcpServer.SendData txtSendData.Text
End Sub
Private Sub tcpServer_DataArrival _
(ByVal bytesTotal As Long)
' Declare a variable for the incoming data.
' Invoke the GetData method and set the Text
' property of a TextBox named txtOutput to
' the data.
Dim strData As String
tcpServer.GetData strData
txtOutput.Text = strData
End Sub
The procedures above create a simple server application. However, to complete the scenario, you must also create a client application.
To create a TCP client Add a new form to the project, and name it frmClient. Change the caption of the form to TCP Client. Add a Winsock control to the form and name it tcpClient. Add two TextBox controls to frmClient. Name the first txtSend, and the second txtOutput. Draw a CommandButton control on the form and name it cmdConnect. Change the caption of the CommandButton control to Connect. Add the code below to the form. Important Be sure to change the value of the RemoteHost property to the friendly name of your computer.
Private Sub Form_Load()
' The name of the Winsock control is tcpClient.
' Note: to specify a remote host, you can use
' either the IP address (ex: "121.111.1.1" or
' the computer's "friendly" name, as shown here.
tcpClient.RemoteHost = "RemoteComputerName"
tcpClient.RemotePort = 1001
End Sub
Private Sub cmdConnect_Click()
' Invoke the Connect method to initiate a
' connection.
tcpClient.Connect
End Sub
Private Sub txtSendData_Change()
tcpClient.SendData txtSend.Text
End Sub
Private Sub tcpClient_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
tcpClient.GetData strData
txtOutput.Text = strData
End Sub
The code above creates a simple client-server application. To try the two together, run the project, and click Connect. Then type text into the txtSendData TextBox on either form, and the same text will appear in the txtOutput TextBox on the other form.
Дело не в том, СКОЛЬКО WinSock'ов будет работать, а в том, что даже уже ОДИН WinSock в режиме непрерывного приема/передачи (такая специфика задачи!) съедает все вычислительные ресурсы CPU.
Этого не наблюдается в приложениях-чатах, т.к. передача сообщений в них происходит короткими порциями и со значительными интервалами времени между ними.
Главную проблему - снижение загрузки проца при непрерывном приеме/передаче - мне пока здесь решить не удалось. Никто похоже, с этим не сталкивался.
Вот только не понимаю как работают программы закачки типа Reget, Flash и подобные им. Наверняка они основаны на том же API, который использован в WinSock (хотя, я уже говорил ранее, что я использовал и чистый API - получил тот же результат). Видимо проблема лежит в самом VB или в одном из его обновлений (у меня стоит SP5)?
Есть у кого-нибудь соображения на этот счет?
Дата: 6 марта 2003 г. | Автор: Виталиум! | Загрузок: 1014
Многоканальный Winsock 2 (20 Kb) В этой версии теперь исправлены некоторые ошибки, присущие предыдущей версии, а также добавлены некоторые новые функции.
Это совсем не то - там простейший чат, причем если его немного переделать и организовать циклическую посылку сообщений, то проц будет опять загружен на 100% !!! То есть глюк WinSock'а подтвердится!
Знаешь, винсок ето громко сказано, вопервых, ты пробовал и винсок.осх и мой контрол - результат один и тот же, что значит, ты говоришь "То есть глюк WinSock'а подтвердится"?Ты хочешь сказать, что Microsoft написал глючную "ws2_32.dll"???Поверь мне, твоё мнение не правильно!разбирайся в своём коде и не говори, что ето глюк других, кстати, авторитетных разработчиков!Я же понятно написал, твой код вызывает цикл, так оптимизируй его!Ищи другие пути!