如何编写IPMUTILCAST方面的程序?(200分呢!)(200分)

  • 主题发起人 主题发起人 cbx
  • 开始时间 开始时间
我有这方面的程序,不过是用VC写的,而且写的是控件,如果你需要,可以通知我,
我给你发过去,程序分为两个部分:(1)服务器端;(2)客户端;
当时程序是在局域网中用的,如果在Internet上使用,必须开通路由,否则无法
成功。

 
可以给我E_Mail一分吗。谢谢了。
gben@sina.com
 
也给我一份,谢谢
eccl@cqu.edu.cn
 
Kill night:先把程序E-MAIL给我看看,好吗!
 
也给我一份,谢谢
luoyg@263.net
 
我正在写一个Delphi的IP MultiCast组件,请等几天
 
服务端:
var
addr : sockaddr_in;
fd,cnt : integer;
mess : array[1..1024] of char;
Paddr : ^sockaddr_in;
i : integer;
// mreq : ip_mreq;
begin
Mult_Group := Edit1.Text ;
Mult_Port := 12345;
fd := socket(AF_INET,SOCK_DGRAM,0);
if (fd < 0) then
begin
showmessage('socket error');
exit;
end;

fillchar(addr,sizeof(sockaddr_in),0);

addr.sin_family := AF_INET;
addr.sin_addr.S_addr := inet_addr(PChar(Mult_Group));
addr.sin_port := Mult_Port;
// Paddr^ := addr;
i:=0;
while i<30 do
begin
strcopy (@mess,pchar(Edit3.text+inttostr(i)));
Memo1.Lines.Add (mess);
if Memo1.Lines.Count >200 then Memo1.Clear ;
if (sendto(fd,mess,sizeof(mess),0,addr,sizeof(addr))<0) then
begin
showmessage('sendto error');
exit;
end;
I:=i+1;
lblSend.Caption := inttostr(i);
sleep(1000);

end;
closesocket(fd);
//----------------------------------------------------------------
接收端:
var
addr : sockaddr_in;
fd,NBYTES,ADDRLEN : integer;
mreq : ip_mreq;
mess : array[1..1024] of char;
i : integer;
// mreq : ip_mreq;
begin
Mult_Group := Edit2.Text ;
Mult_Port := 12345;
fd := socket(AF_INET,SOCK_DGRAM,0);
if (fd < 0) then
begin
showmessage('socket error');
exit;
end;

fillchar(addr,sizeof(sockaddr_in),0);
// strcopy (@mess,pchar(Edit3.text));

addr.sin_family := AF_INET;
addr.sin_addr.S_addr := htonl(INADDR_ANY);
addr.sin_port := Mult_Port;

if (bind(fd,addr,sizeof(addr))<0) then
begin
showmessage('bind error');
exit;
end;

mreq.imr_multiaddr.S_addr := inet_addr(pchar(Mult_Group));
mreq.imr_interface.S_addr := htonl(INADDR_ANY);
if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,@mreq,sizeof(mreq))<0) then
begin
showmessage('setsockopt error');
exit;
end;

i := 0 ;
while i<20 do
begin
addrlen := sizeof(addr);
nbytes := recvfrom(fd,mess,sizeof(mess),0,addr,addrlen);
if nbytes <0 then
begin
showmessage('recvfrom error');
exit;
end;
i:=i+1;
lblReceive.Caption := inttostr(i);
Memo2.Lines.Add(trim(mess));
if Memo2.Lines.Count >200 then Memo2.Clear ;

// showmessage(mess);
end;
closesocket(fd);


//-----------------------------------------------------
这里是我以前写的程序中的一段测试代码,没有整理,但肯定没问题。
 
fireshine:组件写好没有?我急呢!
 
多人接受答案了。
 
后退
顶部