我写了一个通过信使发送信息的小东东。如何通过代理服务器(http、socket等等)向外网发送信息?代理服务器的知识一窍不通啊!
另外,对方如果通过代理服务器上网,有没有办法通过信使给他发信息?

解决方案 »

  1.   

    是NetMessageBufferSend函数function NetSend(dest, Source, Msg: string): Longint; overload;
    type
      TNetMessageBufferSendFunction = function(servername, msgname, fromname: PWideChar;
        buf: PWideChar; buflen: Cardinal): Longint;
      stdcall;
    var
      NetMessageBufferSend: TNetMessageBufferSendFunction;
      SourceWideChar: PWideChar;
      DestWideChar: PWideChar;
      MessagetextWideChar: PWideChar;
      Handle: THandle;
    begin
      Handle := LoadLibrary('NETAPI32.DLL');
      if Handle = 0 then
      begin
        Result := GetLastError;
        Exit;
      end;
        @NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend');
      if @NetMessageBufferSend = nil then
      begin
        Result := GetLastError;
        Exit;
      end;
     MessagetextWideChar := nil;
      SourceWideChar      := nil;
      DestWideChar        := nil;
    try
        GetMem(MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
        GetMem(DestWideChar, 20 * SizeOf(WideChar) + 1);
        StringToWideChar(Msg, MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
        StringToWideChar(Dest, DestWideChar, 20 * SizeOf(WideChar) + 1);
       if Source = '' then
          Result := NetMessageBufferSend(nil, DestWideChar, nil,
            MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1)
        else
        begin
          GetMem(SourceWideChar, 20 * SizeOf(WideChar) + 1);
          StringToWideChar(Source, SourceWideChar, 20 * SizeOf(WideChar) + 1);
          Result := NetMessageBufferSend(nil, DestWideChar, SourceWideChar,
            MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
          FreeMem(SourceWideChar);
        end;
      finally
        FreeMem(MessagetextWideChar);
        FreeLibrary(Handle);
      end;
    end;
    function NetSend(Dest, Msg: string): Longint; overload;
    begin
      Result := NetSend(Dest, '', Msg);
    end;function NetSend(Msg: string): Longint; overload;
    begin
      Result := NetSend('', '', Msg);
    end;// Example:
    procedure TForm1.Button1Click(Sender: TObject);
    const
      NERR_BASE = 2100;
      NERR_NameNotFound = NERR_BASE + 173;
      NERR_NetworkError = NERR_BASE + 36;
      NERR_Success = 0;
    var
      Res: Longint;
      sMsg: string;
    begin
      Res := NetSend('LoginName', 'Your Message...');
      case Res of
        ERROR_ACCESS_DENIED: sMsg := 'user does not have access to the requested information.';
        ERROR_INVALID_PARAMETER: sMsg := 'The specified parameter is invalid.';
        ERROR_NOT_SUPPORTED: sMsg := 'This network request is not supported.';
        NERR_NameNotFound: sMsg := 'The user name could not be found.';
        NERR_NetworkError: sMsg := 'A general failure occurred in the network hardware.';
        NERR_Success: sMsg := 'Message sent!';
      end;
      ShowMessage(sMsg);
    end;
      

  2.   

    是不行啊!不过www.codelphi.com上有篇晶晶的文章你看过就知道了!