LoginSignup
0
1

More than 5 years have passed since last update.

c++ builder XE4 > udpサーバ / udpクライアント > ASCIIコード限定

Last updated at Posted at 2015-05-07
動作確認
C++ builder XE4

updサーバー

server.cpp
#include <IdUDPServer.hpp>
...

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    IdUDPServer1->DefaultPort = 6000;
    IdUDPServer1->Active = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdUDPServer1UDPRead(TIdUDPListenerThread *AThread, const TIdBytes AData,
          TIdSocketHandle *ABinding)
{
    UTF8String str;
    int init_pos = 0;

    str = TEncoding::UTF8->GetString(AData, init_pos, AData.Length);
    Memo1->Lines->Add(str);
}

(追記 2017/02/22)
受信文字列に<0xE2>などのASCII以外のコードが入っている場合、strはNULLになるようだ。
例としてAAA<0xE2>を受信したとしても、上記のstrはNULLになる。

server.h
...
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdSocketHandle.hpp>
#include <IdUDPBase.hpp>
#include <IdUDPServer.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE で管理されるコンポーネント
    TIdUDPServer *IdUDPServer1;
    TMemo *Memo1;
    void __fastcall IdUDPServer1UDPRead(TIdUDPListenerThread *AThread, const TIdBytes AData,
          TIdSocketHandle *ABinding);
private:    // ユーザー宣言
public:     // ユーザー宣言
    __fastcall TForm1(TComponent* Owner);
};
...

イベント
OnUDPRead = IdUDPServer1UDPRead

UTF-8でなくSJISの場合は

    String rcvdStr;
    Idglobal::_di_IIdTextEncoding encSJIS;

    encSJIS = IndyTextEncoding(932);

    int init_pos = 0;
    rcvdStr = encSJIS->GetString(AData, init_pos, AData.Length);

udpクライアント

client.cpp
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    IdUDPClient1->Port = 6000;
    IdUDPClient1->Host = L"127.0.0.1";
    IdUDPClient1->Active = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    IdUDPClient1->Send(
        Edit1->Text,
        IndyTextEncoding(TEncoding::UTF8)
        );
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1