簡體   English   中英

Java套接字不接受字節數組

[英]java socket not accepting byte array

我正在編寫一個簡單的套接字程序,如下所示。 我想將字節數組發送到服務器套接字,並在服務器端進行讀取。 這是服務器

package com.java;

//File Name GreetingServer.java

import java.net.*;
import java.io.*;

public class GreetingsServer extends Thread
{
private ServerSocket serverSocket;

public GreetingsServer(int port) throws IOException
{
   serverSocket = new ServerSocket(port);
   serverSocket.setSoTimeout(10000);
}

public void run()
{
   while(true)
   {
      try
      {
          System.out.println("Waiting for client on port " +
         serverSocket.getLocalPort() + "...");
         Socket server = serverSocket.accept();
         System.out.println("Just connected to "
               + server.getRemoteSocketAddress());
         DataInputStream in =
               new DataInputStream(server.getInputStream());
         System.out.println("--"+ server.getReceiveBufferSize());
         byte[] b1 = new byte[4] ;
         int i =in.read(b1);
         System.out.println("i = " + i  + "b1 = " +b1);
        /* DataOutputStream out =
              new DataOutputStream(server.getOutputStream());
         out.writeUTF("Thank you for connecting to "
           + server.getLocalSocketAddress() + "\nGoodbye!");*/
         server.close();
      }catch(SocketTimeoutException s)
      {
         System.out.println("Socket timed out!");
         break;
      }catch(IOException e)
      {
         e.printStackTrace();
         break;
      }
   }
}
public static void main(String [] args)
{
   int port = Integer.parseInt(args[0]);
   try
   {
      Thread t = new GreetingsServer(port);
      t.start();
   }catch(IOException e)
   {
      e.printStackTrace();
   }
}
}

這是客戶

package com.java;

import java.net.*;
import java.io.*;

public class GreetingClient
{
   public static void main(String [] args)
   {
      String serverName = args[0];
      int port = Integer.parseInt(args[1]);
      try
      {
         System.out.println("Connecting to " + serverName
                             + " on port " + port);
         Socket client = new Socket(serverName, port);
         System.out.println("Just connected to "
                      + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         byte[] b = {1,2,3,4};
         DataOutputStream out =
                       new DataOutputStream(outToServer);
         /*BufferedOutputStream out = new BufferedOutputStream(outToServer);*/
         System.out.println("**" + b);  
         out.write(b);
         /*out.writeUTF("Hello from "
                      + client.getLocalSocketAddress());*/

         client.close();
      }catch(IOException e)
      {
         e.printStackTrace();
      }

   }
}

我得到的輸出是服務器的。

Waiting for client on port 6066...
Just connected to /127.0.0.1:52349
--65536
i = 4b1 = [B@48270664
Waiting for client on port 6066...
Socket timed out!

有兩件事是錯誤的。 首先是字節數組沒有完全到達服務器。 其次,服務器兩次調用線程。

任何輸入都會有所幫助。 如果有人發現問題,請告訴我!

問題不在於發送/接收的是什么,而是您試圖將其輸出到控制台的方式。

數組不會覆蓋toString() 在您的服務器中,您具有:

System.out.println("i = " + i  + "b1 = " +b1);

b1.toString()的輸出是Object.toString()的默認值,正如Javdoc中針對Object

一個字符串,由對象作為實例的類的名稱,符號字符“ @”和對象的哈希碼的無符號十六進制表示組成。

您需要使用Arrays.toString(b1)來獲取一個字符串,該字符串將該數組中的實際字節顯示為[ x, x, x ,x ] (其中每個x是字節的數值)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM