Jeg har 2 klasser - en server og en klient,
serveren overfører en fil til klienten via udp (jeg bruger
datagrammer).
Når jeg kontakter serveren fra klienten går det fint -
serveren afkoder beskeden og foretager sig noget ud fra
den besked den har fået - er det den ene besked sendes
den ene fil, er det den anden besked sendes den anden fil.
Det ser således ud:
byte[] operationbuffer=new byte[20];
System.out.println("Waiting for client requests on port =
"+server_Socket.getLocalPort());
inPacket=new DatagramPacket(operationbuffer, operationbuffer.length);
server_Socket.receive(inPacket);//modtag pakke
addr=inPacket.getAddress();//modtag svar adresse
operationbuffer=inPacket.getData();//modtag pakke i bytearray
String resp=new String(operationbuffer,0,inPacket.getLength());
System.out.println("received command : "+resp);
if (resp.equals("t.gif")||resp.equals("sw22.jpg"))
{
this.sendFile(resp);
Her er ingen problemer....
Når klienten modtager filen (Det er sendfile metoden der sørger for det),
modtages filen fint nok, men klienten hænger og jeg er nødt til manuelt at
lukke dos vinduet før jeg kan fortsætte. Det jeg gerne vil, er at når
filen er overført skal jeg kunne blive ved - også at overføre den samme
fil. Jeg går ud fra at det har noget at gøre med den måde jeg checker for
end of file!
Det er et eller andet sted her det går galt : se nedenfor:
fos=new FileOutputStream("downloaded/"+local);
int d=-1;
int count=0;
inPacket=new DatagramPacket(receivebuffer, receivebuffer.length);
String str=new String(receivebuffer,0,inPacket.getLength());
do
{
if (str.equals("no"))
{message.setText("File not found");
break;
}
else {message.setText("transfering file");}
clientsocket.receive(inPacket);
System.out.println("writing "+count+" k from buffer to file");
d=inPacket.getLength();
for (int i=0;i<receivebuffer.length;i++)
{fos.write(receivebuffer[i]);
fos.flush();}
count++;
} while (receivebuffer.length>1);
men hvad kan det være??
tak!
cg
|