【问题标题】:Sending data from Java to C using socket programming使用套接字编程将数据从 Java 发送到 C
【发布时间】:2011-05-20 00:58:40
【问题描述】:

我正在制作一个使用 WinSock2 将字符串从 Java 客户端发送到 C 服务器的程序。我正在使用 DataOutputStream 通过套接字发送数据。

C 服务器确认接收到的字节,但是当我尝试访问数据时,没有显示任何内容。

服务器

Socket socket = null;
    DataOutputStream dataOutputStream = null;
    DataInputStream dataInputStream = null;
 try {
  socket = new Socket("10.40.0.86", 2007);
  dataOutputStream = new DataOutputStream(socket.getOutputStream());
  dataInputStream = new DataInputStream(socket.getInputStream());
  //dataOutputStream.writeUTF("How are you doing let us see what is the maximum possible length that can be supported by the protocal");
  String line = "hey";
  dataOutputStream.writeUTF(line);
  dataOutputStream.flush();

  //System.out.println(dataInputStream.readLine());
  System.out.println((String)dataInputStream.readLine().replaceAll("[^0-9]",""));
  //System.out.println(dataInputStream.readInt());
  //System.out.println(dataInputStream.readUTF());
 } catch (UnknownHostException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }

客户

if (socket_type != SOCK_DGRAM)
            {
                retval = recv(msgsock, Buffer, sizeof(Buffer), 0);
                printf("Server: Received datagram from %s\n", inet_ntoa(from.sin_addr));

            }

输出

Server: Received 5 bytes, data "" from client
BUFFER :
Server: Echoing the same data back to client...
BUFFER :
Server: send() is OK.

【问题讨论】:

    标签: java c sockets winsock2 dataoutputstream


    【解决方案1】:

    您的 C 代码需要理解 writeUTF() 写入的数据格式(请参阅 Javadoc),或者更简单地说,您需要在 Java 端使用 write(char[]) 或 write(byte[])。

    【讨论】:

    • 正确! Java 正在发送 16 位 UNICODE x'0048' C 程序需要 7 位 ASCII(或者更可能是一些 8 位 Windows 编码)。 printf 将第一个字节 x'00' 解释为字符串的结尾。
    • @James Anderson:不正确。 Java 正在发送一个两字节长度的前缀,后跟修改后的 UTF-8 格式的字符:download.oracle.com/javase/6/docs/api/java/io/DataInput.html请参阅 Javadoc。
    【解决方案2】:

    这是我解决这个问题的方法:-)

    dataOutputStream.write(line.getBytes());
    

    或者更具体地说,这里是我的代码:

    out.write(("Hello from " + client.getLocalSocketAddress()).getBytes());
    

    【讨论】:

      猜你喜欢
      • 2012-01-14
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 2018-07-15
      • 1970-01-01
      相关资源
      最近更新 更多