Страница: 1 |
Страница: 1 |
Вопрос: WinSock выдает ошибку
Добавлено: 06.05.05 10:17
Автор вопроса: Рустам
Помогите пожалуйста!
При отправке данных клиентской программой
выдается ошибка
"Wrong protocol or connection state for the
requested transaction or request"
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #1
Добавлено: 06.05.05 10:28
код в студию!
Номер ответа: 2
Автор ответа:
ArtBase
ICQ: 55593017
Вопросов: 23
Ответов: 76
Профиль | | #2
Добавлено: 06.05.05 14:02
Ты хоть кусок твоего кода кинь, чтоб люди посмотрели в чем причина.
Номер ответа: 3
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #3
Добавлено: 06.05.05 15:03
Может, он не подключен? А может, он уже не подключен?
Номер ответа: 4
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #4
Добавлено: 06.05.05 15:19
Ну, не считая того что он мог в коде напартачить, MSDN говорит следующее:
1.
SYMPTOMS
A Winsock control may fire a DataArrival event with valid data length (a number that is greater than 0) after the Close event. If you try to call the GetData method for that event, you receive the following error message:
Run-time error: 40006
Wrong protocol or connection state for the requested transaction or request.
CAUSE
This problem occurs because of a bug in the Winsock control. Although the occurrence of this problem depends on data flow between two entities, the problem may occur more consistently when the client (receiver) application is much slower than the server (transmitter) application, and when no application-level flow control is implemented.
RESOLUTION
To resolve this problem, obtain the latest service pack for Microsoft Visual Studio 6.0. For more information, visit the following Microsoft Developer Network (MSDN) Web site:
http://msdn.microsoft.com/vstudio/previous/vs6/downloads/default.aspx
2.
SYMPTOMS
If you call the SendData method in the WinSock control before the socket has been connected, you will receive the Microsoft Visual Basic Error:
Run-time error: 40006
"Wrong protocol or connection state for the requested transaction or request."
CAUSE
The code is trying to call the SendData method before the port has actually been connected. The Connect method in Visual Basic is asynchronous and is more like a request to connect to the Winsock port.
RESOLUTION
The code must wait until the Connect event is fired before attempting to call the SendData or GetData methods. The Connect event is a signal that the connect request has been accepted and the connection is established.
3.
SYMPTOMS
In the Usage Analyst import module, the following error message is returned from the Whois command:
Runtime error 40006. Wrong protocol or connection state for the requested transaction or request.
CAUSE
The import module Whois function is querying for data without checking to ensure that the host connection is still alive.
RESOLUTION
To resolve this problem, obtain the following fix or wait for the next Microsoft Site Server 2.0 service pack.
This fix should have the following time stamp:
Usage Analyst Developer Edition for Access
12/10/97 05:47p 3,363,328 import.exe (Intel)
Usage Analyst Developer Edition for SQL
12/10/97 05:08p 3,634,688 import.exe (Intel)
Usage Analyst Standard Edition for Access
12/10/97 05:36p 3,361,280 import.exe (Intel)
Usage Analyst Standard Edition for SQL
12/10/97 05:24p 3,618,304 import.exe (Intel)
То есть, по русски - баги винсока
В первом случае, баг с обработкой сообщения DataArrival после сообщения Close, даже если данные были корректные.
Во втором - вызов SendData до того как порт законнектился, поскольку коннект происходит асинхронно.
Третий относится к базам, так что тебе он вряд ли интересен...
Номер ответа: 5
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #5
Добавлено: 06.05.05 22:37
А у меня глюк был с Accept'ом...
Номер ответа: 6
Автор ответа:
Рустам
Вопросов: 9
Ответов: 10
Профиль | | #6
Добавлено: 08.05.05 04:58
>>>>>КЛИЕНТ<<<<
Private Sub Form_Load()
Dim remote As String
puttime.Close
remote = InputBox("Введите имя компьютера на котором" & Chr(13) & "Запущенна серверная часть программы", "Имя сервера", "A6"
puttime.RemoteHost = remote
puttime.RemotePort = 1101
puttime.Connect
puttime.SendData testind
End Sub
Private Sub Form_Unload(Cancel As Integer)
puttime.Close
End Sub
Private Sub puttime_DataArrival(ByVal bytesTotal As Long)
puttime.GetData ti
puttime.Close
End Sub
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<
>>>>>>>>>>>>>>>>>СЕРВЕР<<<<<<<<<<<<<<<<<<<
Private Sub MDIForm_Load()
intMax = 0
sendtime(0).LocalPort = 1101
sendtime(0).Listen
End Sub
Private Sub sendtime_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sendtime(intMax)
sendtime(intMax).LocalPort = 0
sendtime(intMax).Accept requestID
End If
End Sub
Private Sub sendtime_DataArrival(Index As Integer, ByVal bytesTotal As Long)
sendtime(intMax).GetData (ti)
sendtime(intMax).SendData (tmr)
sendtime(intMax).Close
End Sub
>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<
Смысл в том что после соединения клиент отсылает
некоторый номер. Потом сервер вынимает из файла запись с
этим номером и отсылает ее клиенту.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<
Номер ответа: 7
Автор ответа:
admsasha
ICQ: 234002454
Вопросов: 56
Ответов: 69
Web-сайт:
Профиль | | #7
Добавлено: 09.05.05 04:44
перед отсылки данных, сделай ожидание подлючения, а не сразу шли данные.
Номер ответа: 8
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #8
Добавлено: 09.05.05 14:30
или хотя бы DoEvents поставь...
DoEvents 'Так надежнее
puttime.SendData testind
Номер ответа: 9
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #9
Добавлено: 14.05.05 22:28
в событии подключения винсока
Номер ответа: 10
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #10
Добавлено: 14.05.05 22:29
шли данные.
п.с. извените, случайно нажал на сохранить