webForumDet fria alternativet

Följdfråga till "...skicka data över nätverk"

Java

4 svar · 384 visningar · startad av silo

Medlem sedan nov. 200177 inlägg
Frågan#1

Nu gör jag så att jag skickar 256 bytes i taget så det går hyffsat snabbt, men det har uppstått ett litet problem.
Om jag skickar vanliga textfiler så går det jättebra och alla tecken stämmer, men om jag skickar t.ex. en exefil så blir det inte lika bra för de innehåller lite konstiga tecken. Dessa konstiga tecken blir biljardbollar med olika nummer om man använder Wingdings som teckensnitt (så här med Arial ).
Problemet är när jag läser in filen. Då returnerar srcstream.read() 65535 i stället för ett giltigt ascii-värde vilket inte är så bra. srcstream är en FileReader.
Nån som har nån ide?

Medlem sedan nov. 200177 inlägg
#2

Fel av mig verkar det som. Efter att tittat lite närmare på de där konstiga tecknen så visar det sig att de faktis har värdet 65533 i detta fall och att det är ett tecken. Är det sånt där Unicode eller?
Men då är det nya problemet när jag skickar och läser dessa tecken. Nån stans på vägen så blir det fel och värdet på den emottagna tecknet blir 63='?'.
Jag skickar med en PrintWriter och tar emot med en BufferedReader.

Medlem sedan dec. 2000485 inlägg
#3

Vi håller på med ett exarbete som bl.a. sysslar med filöverföring. Vi har gjort så här (med viss modification):

/* --- Send File --- */
File filnamn = new File("Linux.pdf");
byte c[] = new byte[4096];
int read;

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filnamn));
BufferedOutputStream bos = new BufferedOutputStream(us.getOutputStream());

while ((read = bis.read(c, 0, 4096)) != -1)
bos.write(c, 0, read);

/* --- Close shop --- */
bos.flush();
bis.close();
bos.close();
us.close(); /* User Socket */

/* --- End Send File --- */

/* ---- Receive File ---- */
File filnamn = new File("LinuxCpy.pdf");
byte c[] = new byte[4096];
int read;

BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filnamn));

while ((read = bis.read(c, 0, 4096)) != -1)
bos.write(c, 0, read);

/* --- Close shop --- */
bos.close();
bis.close();
socket.close(); /* close socket */
System.out.println("Transmission complete");

/* --- End Receive File --- */

[Redigerat av D3VaST8D den 22 nov 2001]

[Redigerat av D3VaST8D den 22 nov 2001]

Medlem sedan nov. 200177 inlägg
#4

Jag saknar ord. Tack så hemskt mycket!!!

Medlem sedan nov. 2000199 inlägg
#5

SIlo. Ja Java använders sig av 16 bitars tecken dvs unicode.

------------------
Anders Lindbäck,Igiro Internet Giro

261 ms totalt · 4 externa anrop · v20260731065814-full.bd618308
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)