NMMsg的SendBuffer函数发送的数据怎么接受?
OnMSG事件接受不到呀!

解决方案 »

  1.   

    BCB写的小程序
    发送:
    #include <vcl.h>
    #include <stdio.h>
    #pragma hdrstop#include "MainFrm.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;AnsiString FileExt;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        ClientSocket1->Host = Edit1->Text;
        StatusBar1->Panels->Items[0]->Text = "想要连接的服务器是:"+Edit1->Text;
        ClientSocket1->Active = true;
        if(OpenDialog1->Execute())
        {
            TFileStream *MyFStream;
            MyFStream = new TFileStream(OpenDialog1->FileName, fmOpenRead);
            try
            {
                //主机名
                NMStrm1->Host = Edit1->Text;
                //如果在一台机子上运行则远端地址为0.0.0.0
                Edit2->Text = NMStrm1->RemoteIP;
                Edit3->Text = NMStrm1->LocalIP;
                NMStrm1->FromName = "NetMasters";
                //发送文件
                NMStrm1->PostIt(MyFStream);            //取文件扩展名
                FileExt = ExtractFileExt(OpenDialog1->FileName);
                ClientSocket1->Socket->SendText(FileExt);            ShowMessage("文件"+OpenDialog1->FileName+"发送成功!");
            }
            catch(...)
            {
                ShowMessage("文件"+OpenDialog1->FileName+"发送失败!");
            }
            MyFStream->Free();
        }
    }接收:
    #include <vcl.h>
    #pragma hdrstop#include "MainFrm.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    AnsiString ExtFile;
    //---------------------------------------------------------------------------
    //接收文件
    void __fastcall TForm1::ReceiveFile(AnsiString FileName,TStream *strm)
    {
        TFileStream *MyFStream;
        MyFStream = new TFileStream(FileName);
        try
        {
            MyFStream->CopyFrom(strm, strm->Size);
            ShowMessage("接收成功!");
        }
        catch(...)
        {
            ShowMessage("接收失败!");
        }
        MyFStream->Free();
    }__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::NMStrmServ1MSG(TComponent *Sender,
          const AnsiString sFrom, TStream *strm)
    {
        ReceiveFile(ExtFile,strm);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
        //Edit1->Clear();
        ExtFile = Socket->ReceiveText();
        //Edit1->Text = "请将文件保存为"+Socket->ReceiveText()+"文件";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
        if(!ServerSocket1->Active)
        {
            ServerSocket1->Active = true;
        }
        StatusBar1->Panels->Items[0]->Text = "正在监听";
    }
    //---------------------------------------------------------------------------void __fastcall TForm1::ServerSocket1Accept(TObject *Sender,
          TCustomWinSocket *Socket)
    {
        StatusBar1->Panels->Items[0]->Text = "想与我连接的客户端是:"+Socket->RemoteAddress;
    }
      

  2.   

    把二进制数据读到pchar里面,然后:发送:
    clientsocket1.socket.SendBuf(cf1^,count);读取:
    count:=socket.ReceiveLength;
    getmem(cf1,count);
    socket.ReceiveBuf(cf1^,count);上面的cf1是pchar类型.