首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

win98在indy 的udp 中无法接受数据解决思路

2013-01-26 
win98在indy 的udp 中无法接受数据如题俺在做一个视频传送的程序用win 98 作为 接受视频的一段 传送视频的

win98在indy 的udp 中无法接受数据
如题
俺在做一个视频传送的程序
用win 98 作为 接受视频的一段 
传送视频的一段时 其他操作系统的机子 
但是现在的问题是我用win98 就是接收不到 数据
而用其他的 操作系统就能接受 
一下贴出 两边的代码 求解答

发送视频数据端
    Bitmap := TBitmap.Create;
    Bitmap.Width := BMPINFO.bmiHeader.biWidth;
    Bitmap.Height := BMPINFO.bmiHeader.biHeight;

    // New size of Bitmap
    hd := DrawDibOpen;
    DrawDibDraw(hd, Bitmap.Canvas.Handle, 0, 0, BMPINFO.BmiHeader.biwidth,
        BMPINFO.bmiheader.biheight, @BMPINFO.bmiHeader, lpVHdr^.lpData, 0, 0,
        BMPINFO.bmiHeader.biWidth, BMPINFO.bmiHeader.biheight, 0);
    DrawDibClose(hd);
    memStream := TMemoryStream.Create;

    jpg := TJpegImage.Create;

    jpg.Assign(Bitmap);
    jpg.CompressionQuality := 15;
    jpg.JPEGNeeded;
    jpg.Compress;
    jpg.SaveToStream(memStream);

    jpg.Free;

    //因为UDP数据包有大小限制,这里如果超出部分,就没有传输,完全可以发几次发出去

    Form1.IdUDPClient1.BroadcastEnabled := true; //用广播功能
    if memStream.Size > Form1.IdUDPClient1.BufferSize then
    begin

        Form1.IdUDPClient1.SendBuffer('192.168.1.255', 9001, memStream.memory^, Form1.IdUDPClient1.BufferSize); //向192.168.0.X网段广播,端口 9001
    end
    else
    begin
        form1.IdUDPClient1.Send('1');
        Form1.IdUDPClient1.SendBuffer('192.168.1.255', 9001, memStream.Memory^, memStream.Size);
    end;



接受数据端
procedure TForm1.idpsrvr1UDPRead(Sender: TObject; AData: TStream;
    ABinding: TIdSocketHandle);
var jpg: TJpegImage;
    j: Integer;
    png: TPNGObject;
    bmp: TBitmap;
    ReceiveData: array[1..10000] of Byte;
begin

    begin
        try
            j := AData.Size;
            jpg := TJpegImage.Create;
            jpg.LoadFromStream(Adata);
            png := TPNGObject.Create;
            bmp := TBitmap.Create;
            bmp.Assign(jpg);
            png.Assign(bmp);
            img1.Picture.Assign(png);
            jpg.Free;
            bmp.Free;
            png.Free


        except
        end;

    end;
end;


哪位大神能帮忙解答下
[解决办法]

引用:
关键是 点对点 是 ok的 广播就没用,我在 接收端单步  ,他就不触发 TForm1.idpsrvr1UDPRead 这个事件 也就是说 他就没数据传过来

抓包看看 数据包有没有到达 
发送 接收端的抓 
[解决办法]
UDP广播的IP应该设定为255.255.255.255。

你下载Indy的Demo源代码,然后运行UDPChargenAndEcho这个例子看看。学着改改吧。
[解决办法]
不同网段,到Wind98之间的路由不相通的吧,有没有装防火墙之类的
[解决办法]
试过Indy Demo中的例子没有?

热点排行