当前位置: 首页 > 知识库问答 >
问题:

将字符串从C客户端发送到Java服务器时出错

解鸿运
2023-03-14

我将一个整数从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木卫一。java中的EOFEException。木卫一。数据输入流。java上的Ready(DataInputStream.java:180)。木卫一。数据输入流。java上的readUTF(DataInputStream.java:592)。木卫一。数据输入流。ServiceRequest中的readUTF(DataInputStream.java:547)。在java上运行(ServiceRequest.java:43)。util。同时发生的遗嘱执行人$runnableapter。在java上调用(Executors.java:439)。util。同时发生的FutureTask$Sync。java上的innerRun(FutureTask.java:303)。util。同时发生的未来任务。在java上运行(FutureTask.java:138)。util。同时发生的线程池执行器$Worker。java上的runTask(ThreadPoolExecutor.java:895)。util。同时发生的线程池执行器$Worker。在java上运行(ThreadPoolExecutor.java:918)。朗。丝线。运行(Thread.java:680)

编辑:我试着使用din。readLine(),我不再有错误,但如果在客户端上键入fffffff12,我会得到fffffff12`?7E^Ê?服务器中的h

共有3个答案

苏季同
2023-03-14

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

璩俊雅
2023-03-14

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

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

send(to_server_socket, clientString, strlen(clientString), 0);
养星汉
2023-03-14

您发送clientString数组中的所有数据,无论输入的实际长度如何。正确终止字符串,只发送例如strlen(clientString)bytes。

 类似资料:
  • 问题内容: 我需要从Windows Java服务器向Linux C ++客户端发送一个字符串,反之亦然,但是我编写的代码无法正常工作,我也不知道为什么: *Windows上的 *Java服务器 代码 发送字符串 : *Windows *上的 Java服务器 代码 以接收数据 : *Linux上的 *C ++客户端 代码 发送数据 : *Linux上的 *C ++客户端 代码 以接收数据 : 为什么

  • 我正在创建我的产品,并与这个问题。有一天,我设置了Socket.io,一切都很好。第二天,我将服务器和客户端从http迁移到HTTPS。迁移后客户端和服务器端仍然连接,但不能从客户端发射到服务器,从服务器发射到客户端。 我的ssl证书位于和中,它们加载正确。运行在上的服务器 我的示例react组件。我的react应用程序运行在上。HTTPS连接良好,工作良好。 我该怎么办?也许我在中错误地使用了s

  • 我有一个Netty客户端和一个Netty服务器,并按照主要教程后,为了有一个EchoClient/服务器,我想让它,使我的客户端发送消息到我的服务器,当他第一次连接到它。 下面是我的的方法,这些方法应该解决这个问题: 但是正如你所看到的,教程使用了一个ByteBuf和一个String似乎不起作用! 下面是我如何在我的方法中显示收到的消息: 但是当为使用并在构造函数中初始化它并发送它时,我的服务器不

  • 我有一个关于Java插座的技术问题。 例如,假设我有一个Java Sockets服务器和n个多个客户端。是否可以几乎实时地将数据从服务器发送到任何或所有客户端? 更准确地说: 有哪种监听器可以在Sockets客户端中实现 有人能告诉我什么方法是最好的吗?此外,如果有人有一个代码示例,我也会很高兴。 谢谢

  • 问题内容: 我正在尝试找到一种方法,将不同文件类型的文件从服务器发送到客户端。 我在服务器上有以下代码将文件放入字节数组: 然后,我将fileData作为字符串发送给客户端。这对于txt文件效果很好,但是当涉及到图像时,我发现尽管它可以很好地创建包含数据的文件,但图像无法打开。 我不确定我是否正在按照正确的方式进行操作。谢谢您的帮助。 问题答案: 如果要读取/写入二进制数据,则应使用字节流(Inp

  • 实际上,向服务器发送json字符串(Post)时收到400个错误请求异常, 在Url下面,我得到了这个例外。 _http://---.---.--.---:---/注册/注册用户/{JSON STRING}/{密码} 所以JSON字符串和密码在下面给出 _http:// -。- .- .-:-/sign up/signu user/{ " session id ":" 99 c 77 c 9 b-