4

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.
4

2 に答える 2

2

C コードは、writeUTF() (Javadoc を参照) によって書き込まれたデータ形式を理解する必要があります。そうでない場合は、Java 側で write(char[]) または write(byte[]) を使用する必要があります。

于 2011-05-20T02:19:30.210 に答える
0

これが私がこれを解決した方法です:-)

dataOutputStream.write(line.getBytes());

または、より具体的には、私のコードは次のとおりです。

out.write(("Hello from " + client.getLocalSocketAddress()).getBytes());
于 2013-11-20T10:29:45.380 に答える