|
잠깐 시간을 내서 해보았습니다.
그냥 개념없이 되도록만 한겁니다.(원래 개념이 없음)
약 300k 짜리를 보냈는데..쪼개서 보내야 되는데..
중간에 sleep 이 없으면 안되더군요..
udp 로 파일 전송하는건 불가능하진 않겠지만
상호 통신을 주고 받으면서 하지 않는다면
의미가 없지 않을까 생각합니다.
그래서 tcp 를 쓰는가 봐요.
되긴 됩띠다.sleep 넣으니까..
//send
void __fastcall TForm1::Button1Click(TObject *Sender)
{
NMUDP1->RemoteHost="216.214.109.181";
NMUDP1->RemotePort=4989;
FILE*fp=fopen("e:\\aaaa.bmp","rb");
int read_size;
fseek(fp,0,2);
long size=ftell(fp);
char buf[2048];
fseek(fp,0,0);
AnsiString st="start:aaaa.bmp";
NMUDP1->SendBuffer(st.c_str(),st.Length(),st.Length());
Sleep(200);
while(size)
{
read_size=(size>2048)?2048:size;
fread(buf,read_size,1,fp);
size -= read_size;
NMUDP1->SendBuffer(buf,read_size,read_size);
Sleep(200);
}
AnsiString end="done!";
Sleep(200);
NMUDP1->SendBuffer(end.c_str(),end.Length(),end.Length());
ShowMessage("done!");
fclose(fp);
}
//---------------------------------------------------------------------------
//receive
void __fastcall TForm2::FormShow(TObject *Sender)
{
NMUDP1->LocalPort=4989;
}
//---------------------------------------------------------------------------
FILE*fp;
void __fastcall TForm2::NMUDP1DataReceived(TComponent *Sender,
int NumberBytes, AnsiString FromIP, int Port)
{
int readen;
char buf[2048];
NMUDP1->ReadBuffer(buf,NumberBytes,readen);
if(strncmp(buf,"start",5)==0){
fp=fopen("c:\\bbbb.bmp","w+b");
}else if(strncmp(buf,"done!",5)==0){
fclose(fp);
ShowMessage("receive done!");
}else{
if(fp){
fwrite(buf,readen,1,fp);
}
}
}
...끝...
강우식 님이 쓰신 글 :
: tcp/ip를 이용한건 많이있지요...^^
:
: 그런데 유디피를 이용한건 어디서 구할수 있을까요...?
:
: 아니면 방법만이라도...
:
: UDP의 특성상 정확한 전송을 원하는건 아닙니다.
:
: BroadCasting을 할 목적이니까요....
:
: 부탁드립니다...^^
|