Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Złe odbieranie informacji przez Winsocka.
PAWKO




Typ: neutral
Postów: 42
Zarejestrowany: Mar 2003
Złe odbieranie informacji przez Winsocka.

Witam. Trafił mi sie taki problem i nie moge sobie poradzić. Mianowicie mam dwie aplikacje komunikujące sie za pomocą Winsocka. Gdy z jednej aplikacji wysyłam ciąg znaków (ciąg poprwny) druga odbiera głupoty ze tak powiem.

Kod aplikacji wysyłającej ciąg (String):
Form:
Private Function MessageType() As VbMsgBoxStyle
    If optQuestion.Value = True Then MessageType = vbExlamation
    If optExclamation.Value = True Then MessageType = vbExclamation
    If optCritical.Value = True Then MessageType = vbCritical
    If optInformation.Value = True Then MessageType = vbInformation
End Function

Private Sub AnyButton1_Click()
Dim MesType As String
Dim Data As String
    Tytol = txtTitle.Text
    Tresc = txtMessage.Text
    MesType = MessageType
    Data = "MsgBox" + "||" + Tytol + "||" + Tresc + "||" + MesType
    MsgBox Data 'w celu sprawdzenia co sie wysyla (linijka do usuniecia)
    SendData Data
End Sub

Module:
Public Sub SendData(Data)
    frmConnect.wscConnection.SendData Data
End Sub


Kod aplikacji odbierającej dane:
Form
Private Sub wscConnection_DataArrival(ByVal bytesTotal As Long)
    Dim Data As String
    wscConnection.GetData Data
    MsgBox Data 'w celu sprawdzenia co przyszlo (linijka do usuniecia)
    GetData Data
End Sub

Problem w tym ze wysylany jest poprawny ciąg np. Wyraz1||Wyraz2||Wyraz3 (potem funkcja Split rozdzielam to), a odbieram (w tej drugiej aplikacji) ciąg np. taki: D¸

[Post edytowany dnia 08-11-2004 19:31 przez PAWKO]

08-11-2004 19:27
Pokaż profil PAWKO  Wyślij email do PAWKO   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Nie mam pomysłu, co może być źle. Kod wygląda prawie dobrze. Zachowuje się tak, jakby podczas konwersji z UNICODE na ANSI coś się krzaczyło, ale to jedyne, co rpzychodzi mi do głowy... :/

Jedyne, co mogę polecić, to:
1) Zobacz, co się stanie, gdy usuniesz "||" z ciągu znaków.
2) Zamień + na & (+ to operator dodawania, nie łączenia łańcuchów!).


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

08-11-2004 22:10
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
PAWKO




Typ: neutral
Postów: 42
Zarejestrowany: Mar 2003

Niestety nie pomogło.

08-11-2004 23:28
Pokaż profil PAWKO  Wyślij email do PAWKO   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

No to nie mam pomysłów...
Tytol i Tresc są zdeklarowane jako String?


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

08-11-2004 23:46
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
PAWKO




Typ: neutral
Postów: 42
Zarejestrowany: Mar 2003

Problem rozwiązany. Oczywiście jak często bywa rozwiązanie było trywialne. Mianowicie w aplikacji wysyłającej mamy kod:

Data = "MsgBox" + "||" + Tytol + "||" + Tresc + "||" + MesType
    MsgBox Data 'w celu sprawdzenia co sie wysyla (linijka do usuniecia)
    SendData Data

pod procedurą SendData mamy:
Public Sub SendData(Data)
    frmConnect.wscConnection.SendData Data
End Sub

Wystarczylo zmienic (dopisać) na:
Public Sub SendData(Data as String)
    frmConnect.wscConnection.SendData Data
End Sub

08-11-2004 23:51
Pokaż profil PAWKO  Wyślij email do PAWKO   
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

aha.. no tak.. akurat na brak okreslenia typu tutaj nie zwróciłem uwagi . Ale pomysł miałem w sumie dobry (z tym sprawdzeniem typów) ...

A tak na powaznie - ja też nie lubię tego typu błędów... najgłupsze sprawy a potrafią człowieka przykuć do kodu na wiele dni :/.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

09-11-2004 00:11
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
jabadabas



Typ: neutral
Postów: 29
Zarejestrowany: Nov 2004

Ja osobiście dodałbym jeszcze "DoEvents". Funkcja ta nakazuje systemowi czekać aż wiadomość zostanie wysłana do końca. Pomoże to w przypadku gdy w bardzo małych odstępach czasu będziesz wysyłał informacje(np. za pomocą pętli).

Public Sub SendData(Data as String)
    frmConnect.wscConnection.SendData Data
    <B>DoEvents</B>
End Sub


_____________________________________________
Pozdrawiam, Marcin.


VB-Site

13-11-2004 23:08
Pokaż profil jabadabas  Wyślij email do jabadabas   Odwiedź stronę jabadabas       3398490
Wszystkich odpowiedzi: 6 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1