2011-06-21 18 views
1

wxSockets writeの使い方の簡単な例を提供する人がいます。なぜなら、接続に書き込むたびに、このプログラムのウィンドウが表示され、 mxはwxSocketBase :: Writeを使っています。それとも誰が​​失敗したのか知っていますか?wxSocket wxWidgetsが失敗しました

wxSocketClient * sockConn = new wxSocketClient(); 

wxString url = "localhost"; 
wxIPV4address addr; 
addr.Hostname(url); 
addr.Service(6667); 


sockConn->Connect(addr); 


wxString test = wxT("testing"); 
    sockConn->Write(test.mb_str(), wxStrlen(test)); 



sockConn->Close(); 
delete sockConn;` 

そして、私が書き込みを呼び出すたびに、それはちょうど失敗は

また簡単な方法があります:

は、私もこのような何かを書くことになっているバッファをハードコーディングすることを試みましたwxStringをwxSocketと連動させるには、ここで何が起こっているのか把握してから簡単にできるはずです。

現在、このようなことをするためにwinsockを使うのはずっと簡単ですし、なぜwxWidgetsを持っているのではないのでしょうか、私は人生を楽にしています。

+0

あなたは私たちがあなたの問題のお手伝いを聞かせ任意の情報を提供していません。コードの投稿はどうですか? – ravenspoint

+0

OKよく私はコード – csteifel

答えて

2

誰かがwxSocketsの書き込み方法の簡単な例を提供できますか?

はい、私は次のことができます。

#include <wx/wx.h> 
#include <wx/socket.h> 
#include <iostream> 

int main() { 
    wxInitialize(); 
    wxSocketClient * sockConn = new wxSocketClient(wxSOCKET_WAITALL); 
    wxString url = wxT("localhost"); 
    wxIPV4address addr; 
    addr.Hostname(url); 
    addr.Service(6667); 
    if(!sockConn->Connect(addr, true)) { 
    std::cout << "Connect failed\n"; 
    return 1; 
    } 
    wxString test = wxT("testing\n"); 
    sockConn->Write(test.mb_str(), wxStrlen(test)); 
    sockConn->Close(); 
    delete sockConn; 
    wxUninitialize(); 
    return 0; 
} 
0

私はあなたがwxSocketBaseを使うべきではないと思います。 wxSocketClient またはwxSocketServerを使用する必要があります。ここでは、投稿のコードを見てみるとwxSocketClient

// connect to a server on the same machine, listening on port 3000 
wxSocketClient mySocket; 
wxIPV4address addr; 
addr.Hostname(L"localhost"); 
addr.Service(3000); 
mySocket.Connect(addr,true)); // should check return for success 

// write something 
char sentence[100]; 
sprintf(sentence,"$SDDBT,%5.1f,0,0,,0*00\x13\n",depth/10.0); 
mySocket.Write(sentence,strlen(sentence)); 

の簡単な例ですが、私は物事のカップルを調査するでしょう。

まず、Connect()からの戻りを確認して、実際に接続を確立する必要があります。

第2に、ユニコードまたはマルチバイトのビルドを使用していますか?私はそれがユニコードかもしれないように私に見える

+0

を追加しました。それは私がやっていることです....ソケットクライアントはソケットベースのものです... – csteifel

+0

あなたの質問を編集して、何をしているのかを正しく記述し、コードを投稿してください。あなたは、使用法の簡単な例を求めました。私はそれを提供しました。 – ravenspoint

0

私はあなたがwxString :: mb_str()を悪用しているかもしれないと思う。

ドキュメントは私たちにこれを与える:

wxString :: mb_strのconstのchar * mb_str(wxMBConv & CONV)constは

のconst wxCharBufferのmb_str(wxMBConv & CONV)constは

戻り値をマルチバイト(C文字列) 文字列の表現。 ユニコードでは、convの cWC2MBメソッドを使用して変換し、 wxCharBufferを返します。 ANSIビルドでは、この 関数はc_strと同じです。 wxWX2MBbufマクロは、正しい (constなし)の戻り値の型として定義されています。

これは、あなたが

代わりwxStringのはstd ::文字列を使用する
wxMBConv conv; 
sockConn->Write(test.mb_str(conv), wxStrlen(test)); 
+0

その必要はありません – csteifel

0
std::string test("testing"); 
sockConn->Write(test.c_str(), test.length); 

シンプルのようなものを書く必要があることを私に示唆しています。

関連する問題