java - 如何在Java中处理C字符数组

标签 java c client-server httpclient

我在实现 C 客户端/Java 服务器时遇到问题。我在服务器端的 put 方法有问题。我的问题与( Handling C char arrays with Java char arrays )相同,但给定的解决方案不适用于我的情况。

我的问题是我收到了一个损坏的文件。

当我看到原始文件和接收到的文件的原始数据时,我注意到 Java 无法识别某些字符。例如,在原始文件中,我在接收到的文件中具有由 89 表示的字符,如果我以 UTF-8 格式写入字节数组,则有“ef bf bd”;如果以 US-ASCII 编码写入字节数组,则有“3f”。这是我的程序的重要部分:

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;;
 } 

如有任何帮助,我们将不胜感激。提前致谢。

最佳答案

由于它是客户端服务器并且您使用套接字编程,因此最好使用 hton() 和 ntoh() 函数来确定。这些是C/C++中使用的函数,我确信java中也会有类似的东西。我认为它会解决你的问题,或者至少是一个更好的实现。我给你链接:

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

我发现函数下面的描述非常有用。

关于java - 如何在Java中处理C字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20274833/

相关文章:

c - scanf 问题

c# - 为什么默认情况下 Switch 语句的 Fall-Through?

java - java客户端服务器通信中的套接字创建

java - 如何针对损坏的服务器测试客户端实现?

java - Java中unix命令之间的通信

java - Spring 超时后抛出 "ERROR SqlExceptionHelper: Already closed"

c++ - C/C++ : goto into the for loop

c++ - 从客户端到服务器的额外数据(json)

java - 在 Java 中查找网页上文本框的总数 - Selenium

java - JButton alpha 背景随着鼠标悬停而改变