Прием данных в WinSock - VB

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Такой вопрос, в Winsock2_DataArrival (в самом низу кода) приходят данные с клиента (это приложение под Андроид, на нем есть две кнопки, одна отправляет единицу, вторая двойку), но операторы if не выполняются и значение viewData не меняется, хотя и "1", и"2" доходят и отображаются в текстовом поле. Что я делаю не так? (VISUAL BASIC 6)
Листинг программы
  1. Option Explicit
  2. Dim viewData As Double 'переменная хранящая данные (температуру)
  3. Dim connectionState As Boolean ' переменная, отвечающая за состояние подключения
  4.  
  5. Public Function WinToUTF8(ByRef inString As String, ByVal lMaxSize As Long) As String
  6. Dim hMemLock1 As Long, hMemLock2 As Long
  7. Dim iStrSize As Long
  8. hMemLock1 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)
  9. hMemLock2 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)
  10. iStrSize = MultiByteToWideChar(0&, 0&, inString, &HFFFF, hMemLock1, lMaxSize)
  11. iStrSize = WideCharToMultiByte(65001, 0&, hMemLock1, iStrSize, hMemLock2, lMaxSize, 0&, 0&) ' CP_UTF8
  12. If Len(iStrSize) Then
  13. WinToUTF8 = String$(iStrSize, 0&)
  14. Call CopyMemory(ByVal WinToUTF8, ByVal hMemLock2, iStrSize)
  15. End If
  16. Call LocalFree(hMemLock1)
  17. Call LocalFree(hMemLock2)
  18. End Function
  19. Public Function WinToUTF8TXT(Txt As Variant) As String
  20. If Txt & "" = "" Then Exit Function
  21. Dim i As Long, s As String, Tmp As String
  22. Tmp = Txt
  23. i = (Len(Tmp) + 1) * 2
  24. s = WinToUTF8(Tmp, i)
  25. s = Left(s, Len(Tmp) * 2)
  26. WinToUTF8TXT = s
  27. End Function
  28. Private Sub LabelPref()
  29. 'Набор настроек элементов управления
  30. lbData.Caption = CStr(viewData) + "°C"
  31. lbData.ForeColor = vbGreen
  32. lbData.Font = "Times New Roman"
  33. lbData.FontSize = 100
  34. lbData.Alignment = 2
  35. frTP.Caption = "Температура процесса"
  36. frTP.FontSize = 12
  37. frCS.Caption = "Состояние подключения"
  38. frCS.FontSize = 12
  39. Shape1.BackStyle = 1
  40. Shape2.BackStyle = 1
  41. Shape1.BackColor = vbRed
  42. Shape2.BackColor = vbRed
  43. lbChat.Font = "Times New Roman"
  44. lbChat.FontSize = 24
  45. lbChat.Caption = " Чат"
  46. lbChat.ForeColor = vbYellow
  47. lbCData.Font = "Times New Roman"
  48. lbCData.FontSize = 24
  49. lbCData.Caption = " Данные"
  50. lbCData.ForeColor = vbYellow
  51. txtOutput.Text = ""
  52. txtSendData.Text = ""
  53. cmdSendData.Caption = "Отправить"
  54. txtOutput.Locked = True
  55. End Sub
  56. Private Sub cmdSendData_Click()
  57. Dim b As String
  58. 'Преобразовываем строку в кодировку UTF-8
  59. b = WinToUTF8TXT(txtSendData.Text & vbCrLf)
  60. 'Отправляем сообщение
  61. Winsock1.SendData b
  62. 'Записываем в лог чата
  63. txtOutput.Text = txtOutput.Text & vbNewLine & "Сервер: " & txtSendData.Text
  64. 'Стираем текст
  65. txtSendData.Text = ""
  66. txtSendData.SetFocus
  67. End Sub
  68. Private Sub Form_Load()
  69. viewData = 10
  70. LabelPref
  71. connectionState = False
  72. 'Устанавливаем порт для прослушивания
  73. Winsock1.LocalPort = 6574
  74. Winsock2.LocalPort = 6575
  75. 'Начинаем прослушивать
  76. Winsock1.Listen
  77. Winsock2.Listen
  78. Timer1.Interval = 1000
  79. End Sub
  80.  
  81. Private Sub txtSendData_KeyPress(KeyAscii As Integer)
  82. 'Если нажат Enter - отправляем данные
  83. If KeyAscii = 13 Then cmdSendData_Click
  84. End Sub
  85. Private Sub Winsock1_Close()
  86. 'Закрываем соединение, если оно еще не закрыто
  87. If Winsock1.State <> sckClosed Then Winsock1.Close
  88. 'Начинаем прослушивать еще раз
  89. Winsock1.Listen
  90. End Sub
  91. Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  92. 'Останавливаем прослушивание
  93. '(Обязательно!)
  94. Winsock1.Close
  95. 'Подключаем клиента
  96. Winsock1.Accept requestID
  97. 'Очищаем лог разговора
  98. txtOutput.Text = "ЕСТЬ ПОДКЛЮЮЧЕНИЕ!!!"
  99. Shape1.BackColor = vbGreen
  100. End Sub
  101. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  102. Dim s As String
  103. 'Принимаем все данные
  104. Winsock1.GetData s, vbString
  105. 'Записываем данные в лог разговора
  106. txtOutput.Text = txtOutput.Text & vbNewLine & "Клиент: " & s
  107. 'Перемещаем курсор в конец лога
  108. txtOutput.SelStart = txtOutput.SelLength
  109. End Sub
  110. Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
  111. MsgBox Description, vbCritical
  112. Winsock1_Close
  113. End Sub
  114. Private Sub Winsock2_ConnectionRequest(ByVal requestID As Long)
  115. 'Останавливаем прослушивание
  116. '(Обязательно!)
  117. Winsock2.Close
  118. 'Подключаем клиента
  119. Winsock2.Accept requestID
  120. connectionState = True
  121. 'Очищаем лог разговора
  122. txtOutput.Text = txtOutput.Text & vbNewLine & "ЕСТЬ ПОДКЛЮЮЧЕНИЕ ДАННЫХ!!!"
  123. Shape2.BackColor = vbGreen
  124. End Sub
  125. Private Sub Winsock2_Close()
  126. 'Закрываем соединение, если оно еще не закрыто
  127. If Winsock2.State <> sckClosed Then Winsock2.Close
  128. 'Начинаем прослушивать еще раз
  129. Winsock2.Listen
  130. End Sub
  131. Private Sub Winsock2_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
  132. MsgBox Description, vbCritical
  133. Winsock2_Close
  134. End Sub
  135. Private Sub cmdSendData2_Click()
  136. viewData = viewData - 1
  137. End Sub
  138. Private Sub cmdSendData3_Click()
  139. viewData = viewData + 1
  140. End Sub
  141. Private Sub DataResultMax()
  142. viewData = viewData + 0.3
  143. If viewData < 15 And viewData > 5 Then
  144. lbData.ForeColor = vbGreen
  145. lbData.Caption = CStr(viewData) + "°C"
  146. End If
  147. If viewData < 16.5 And viewData > 15 Then
  148. lbData.ForeColor = vbYellow
  149. lbData.Caption = CStr(viewData) + "°C"
  150. End If
  151. If viewData > 16.5 Then
  152. lbData.ForeColor = vbRed
  153. lbData.Caption = CStr(viewData) + "°C"
  154. End If
  155. End Sub
  156. Private Sub Timer1_Timer()
  157. DataResultMax
  158. If connectionState = True Then
  159. Winsock2.SendData CStr(viewData & vbCrLf)
  160. End If
  161. End Sub
  162. Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
  163. 'Dim s As String
  164. Dim i As Integer
  165. 'Принимаем все данные
  166. Winsock2.GetData i, vbInteger
  167. 'i = CInt(s)
  168. If i = 1 Then
  169. viewData = viewData - 1
  170. End If
  171. If i = 2 Then
  172. viewData = viewData + 1
  173. End If
  174. 'Записываем данные в лог разговора
  175. txtOutput.Text = txtOutput.Text & vbNewLine & "Клиент: " & i
  176. 'Перемещаем курсор в конец лога
  177. txtOutput.SelStart = txtOutput.SelLength
  178. End Sub

Решение задачи: «Прием данных в WinSock»

textual
Листинг программы
  1. Dim i As String
  2. Winsock2.GetData i
  3.     If i = "1" Then
  4.     ...
  5.       Else
  6.     ....
  7.     End If

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы