Вопрос: Работа WinSock и загрузка CPU | Добавлено: 21.06.04 17:15 |
Автор вопроса: ![]() |
Ответы | Всего ответов: 28 |
Номер ответа: 16 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 554200 Вопросов: 101 Ответов: 343 |
Профиль | Цитата | #16 | Добавлено: 24.06.04 13:37 |
Прои именнованные каналы посмотри на rsdn.ru, сам работать не пробовал, но это, вроде, легче чем winsock...
Насчет твоей проблемы мне пока не ясно в чем дело... я писал клиент-серверные приложения и с использованием winsock.ocx и c использованием winsock api, но проблем не встречал... У меня сейчас сессия и очень мало времени, может на выходных подумаю над решением твоей проблемы... |
Номер ответа: 17 Автор ответа: ![]() ![]() ICQ: 780477 Вопросов: 72 Ответов: 1297 |
Web-сайт: Профиль | Цитата | #17 | Добавлено: 24.06.04 13:53 |
Не знаю точного ответа, я не разбирался с кодом, но думаю,чт опроблема в пересылке числа + 1. Очень уж маленький шаг увеличения!И, конечно, большая нагрузка на сеть, но при твоих 100 мбит ето не заметно, а главное припадает на проц. Ведь при 100 мбит получаеться цикл клиента и сервера, отсюда, я думаю, и большая загрузка проца. Посмотри ещё на расход памяти, если он маленький, то мое мнение правда, если ще большой, то ето или код твой паршивый или Visual Basic глючит. П. С. какие активиксы?Активиксы выполняються в отдельном потоку, что ещё больше загружает проц и замедляет скорость. АПИ выполняються в одном потоку с приложением, рекомендую юзать именно их. |
Номер ответа: 18 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 554200 Вопросов: 101 Ответов: 343 |
Профиль | Цитата | #18 | Добавлено: 24.06.04 18:37 |
Вопрос:
Возможна ли одновременная работа в одной программе двух 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" ![]() ' 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. Sergey Y. Tkachev Нечаянно наткнулся, может поможет... |
Номер ответа: 19 Автор ответа: ![]() ![]() Вопросов: 2 Ответов: 11 |
Профиль | Цитата | #19 | Добавлено: 24.06.04 19:50 |
Дело не в том, СКОЛЬКО WinSock'ов будет работать, а в том, что даже уже ОДИН WinSock в режиме непрерывного приема/передачи (такая специфика задачи!) съедает все вычислительные ресурсы CPU.
Этого не наблюдается в приложениях-чатах, т.к. передача сообщений в них происходит короткими порциями и со значительными интервалами времени между ними. Главную проблему - снижение загрузки проца при непрерывном приеме/передаче - мне пока здесь решить не удалось. Никто похоже, с этим не сталкивался. Вот только не понимаю как работают программы закачки типа Reget, Flash и подобные им. Наверняка они основаны на том же API, который использован в WinSock (хотя, я уже говорил ранее, что я использовал и чистый API - получил тот же результат). Видимо проблема лежит в самом VB или в одном из его обновлений (у меня стоит SP5)? Есть у кого-нибудь соображения на этот счет? |
Номер ответа: 20 Автор ответа: ![]() ![]() ICQ: 780477 Вопросов: 72 Ответов: 1297 |
Web-сайт: Профиль | Цитата | #20 | Добавлено: 24.06.04 22:57 |
А ты сделай на С и посмотри, изменился ли результат |
Номер ответа: 21 Автор ответа: ![]() ![]() Вопросов: 2 Ответов: 11 |
Профиль | Цитата | #21 | Добавлено: 25.06.04 16:46 |
Если бы знал С, то сделал бы! |
Номер ответа: 22 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 204447456 Вопросов: 28 Ответов: 664 |
Web-сайт: Профиль | Цитата | #22 | Добавлено: 26.06.04 02:49 |
Может это?
Дата: 6 марта 2003 г. | Автор: Виталиум! | Загрузок: 1014 Многоканальный Winsock 2 (20 Kb) В этой версии теперь исправлены некоторые ошибки, присущие предыдущей версии, а также добавлены некоторые новые функции. http://www.vbnet.ru/sample/sampledownload.asp?id=288 |
Номер ответа: 23 Автор ответа: ![]() ![]() Вопросов: 2 Ответов: 11 |
Профиль | Цитата | #23 | Добавлено: 30.06.04 09:41 |
Это совсем не то - там простейший чат, причем если его немного переделать и организовать циклическую посылку сообщений, то проц будет опять загружен на 100% !!! То есть глюк WinSock'а подтвердится! |
Номер ответа: 24 Автор ответа: ![]() ![]() Вопросов: 2 Ответов: 11 |
Профиль | Цитата | #24 | Добавлено: 30.06.04 19:16 |
Чем дальше тема от начала - тем меньше в нее заглядывают...
Полное собрание откровений... |
Номер ответа: 25 Автор ответа: ![]() ![]() Вопросов: 2 Ответов: 11 |
Профиль | Цитата | #25 | Добавлено: 30.06.04 19:19 |
И ведь что интересно - все работают с WinSock, но дельного совета пока никто не дал... |
Номер ответа: 26 Автор ответа: ![]() ![]() ICQ: 780477 Вопросов: 72 Ответов: 1297 |
Web-сайт: Профиль | Цитата | #26 | Добавлено: 30.06.04 22:08 |
Знаешь, винсок ето громко сказано, вопервых, ты пробовал и винсок.осх и мой контрол - результат один и тот же, что значит, ты говоришь "То есть глюк WinSock'а подтвердится"?Ты хочешь сказать, что Microsoft написал глючную "ws2_32.dll"???Поверь мне, твоё мнение не правильно!разбирайся в своём коде и не говори, что ето глюк других, кстати, авторитетных разработчиков!Я же понятно написал, твой код вызывает цикл, так оптимизируй его!Ищи другие пути! |
Номер ответа: 27 Автор ответа: ![]() ![]() ICQ: 780477 Вопросов: 72 Ответов: 1297 |
Web-сайт: Профиль | Цитата | #27 | Добавлено: 30.06.04 22:12 |
Ладно, именно из-за интереся напишу такую же штуку на С++.Времени сейчас у меня малувато, ждать нужно будет где-то 2 дня. |
Номер ответа: 28 Автор ответа: ![]() ![]() ICQ: 780477 Вопросов: 72 Ответов: 1297 |
Web-сайт: Профиль | Цитата | #28 | Добавлено: 03.07.04 19:03 |
наконец-то нашел свободный часик и написал тоже самое на С++, тем, кто хочет узнать результат грузим здесь: http://dasharm.iatp.org.ua/ironia.zip |
|