2013-11-28 1 views
0

У меня возникла проблема с реализацией C-клиентского/Java-сервера. У меня проблема с методом put на стороне сервера. Моя проблема такая же, как (Handling C char arrays with Java char arrays), но данное решение не работает в моем случае.Как обрабатывать массив C char в Java

Моя проблема в том, что я получаю поврежденный файл.

Когда я вижу исходный файл и полученный файл, я заметил, что Java не распознает какой-либо символ. Например, в исходном файле у меня есть символ, представленный 89 в полученном файле, у меня есть «ef bf bd», если я напишу массив байтов в UTF-8 или «3f», если я напишу его в кодировке US-ASCII. Вот важная часть моей программы: сторона

InputStream entreeSocket = socketService.getInputStream(); 
FileOutputStream out = new FileOutputStream(filename); 
while(length > 0){ 
int nb; 
if(length > buffer.length) 
     nb = socket.read(buffer,0,buffer.length); 
else 
    nb = socket.read(buffer,0,length); 
out.write(buffer,0,nb); 
if(nb == -1) break; 
length -=nb;    
} 

out.close(); 
socket.close(); 

Клиент:

char buffer[1024]; 
while(length > 0){ 
    nb = read(fd,buffer,1024); 
    write(sockfd,buffer,nbChar);    
    length = length - nb;; 
} 

Любая помощь будет оценена. Заранее спасибо.

+0

См. [Как написать файл UTF-8 с Java?] (Http://stackoverflow.com/questions/1001540/how-to-write-a-utf-8-file-with-java) – netcoder

+0

I попробовали это, но это не сработало. Спасибо – user3036156

+0

Является ли это работа для JNI? – EyeOfTheHawks

ответ

0

Поскольку это клиентский сервер, и вы используете программирование сокетов, было бы полезно использовать функции hton() и ntoh(), чтобы быть уверенными. Это функции, которые используются в C/C++, и я уверен, что в java будет что-то подобное. Я думаю, что это решит вашу проблему, или, по крайней мере, это лучшая реализация. Я даю вам ссылку:

http://www.beej.us/guide/bgnet/output/html/multipage/htonsman.html

я найти описание ниже функций очень информативен.

Смежные вопросы