我在实现C客户端/ Java服务器时遇到问题。我在服务器端的put方法有问题。我的问题与(Handling C char arrays with Java char arrays)相同,但给定的解决方案在我的情况下不起作用。
我的问题是我收到了一个损坏的文件。
当我看到原始文件的原始文件和收到的文件时,我注意到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 :(得分:0)
因为它是一个客户端服务器而你使用套接字编程,所以最好使用hton()和ntoh()函数来确定。这些是在C / C ++中使用的函数,我相信在java中会有这样的东西。我认为它将解决您的问题,或者至少它是一个更好的实现。我给你链接:
http://www.beej.us/guide/bgnet/output/html/multipage/htonsman.html
我发现功能下面的描述非常有用。