【问题标题】:error while sending a String from C client to Java server将字符串从 C 客户端发送到 Java 服务器时出错
【发布时间】:2013-04-28 22:16:18
【问题描述】:

我从 C 客户端向 Java 服务器发送一个整数,它运行良好。但是当我试图用一个字符串做同样的事情时,我得到了错误 这是发送字符串的客户端代码

char clientString[30];

    printf("String to send : \n");

        if( send( to_server_socket, &clientString, sizeof( clientString ), 0 ) != sizeof( clientString ) )
        {
            printf( "socket write failed");
            exit( -1 );
        }

以及读取它的java代码

DataInputStream din = new DataInputStream(socket.getInputStream());
          String clientString=din.readUTF();
           System.out.println(clientString);

错误

java.io.EOFException 在 java.io.DataInputStream.readFully(DataInputStream.java:180) 在 java.io.DataInputStream.readUTF(DataInputStream.java:592) 在 java.io.DataInputStream.readUTF(DataInputStream.java:547) 在 ServiceRequest.run(ServiceRequest.java:43) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 在 java.lang.Thread.run(Thread.java:680)

编辑:我尝试使用din.readLine(),我没有错误了,但是如果我在客户端输入 fffffff12 我在服务器中得到 fffffff12`?7E^Ê?h

【问题讨论】:

  • 好的,我们有 Java 异常调用堆栈,但是对于 what 异常呢?
  • 另请注意,&clientStringsizeof(clientString) 可能不会按照您的预期进行。请编辑您的问题以包含clientString 的声明。

标签: java c sockets datainputstream


【解决方案1】:

您发送所有 clientString 数组中的数据,无论输入的实际时间有多长。正确终止字符串并仅发送例如strlen(clientString) 字节。

【讨论】:

    【解决方案2】:

    readUTF 不只是从套接字读取字节。它首先读取字符串的长度(作为 16 位整数),然后读取字符串。问题是您发送的不是readUTF 成功工作所需要的。

    正如 Joachim Pileborg 所指出的,您还发送了 clientString 的全部 30 个字节(包括未明确设置的任何剩余字节)。你应该这样发送:

    send(to_server_socket, clientString, strlen(clientString), 0);
    

    【讨论】:

      【解决方案3】:

      也许问题是在客户端您正在写入 ASCII 字符串,但在服务器端您正在读取 UTF,请尝试以 ASCII 格式读取数据,如果可能,请提及发生的异常。此方法可以引发两个异常:1- IO 异常或 2- EOF 异常。

      【讨论】:

      猜你喜欢
      • 2018-03-02
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      相关资源
      最近更新 更多