我正在编写一个简单的套接字程序,如下所示。我想将一个字节数组发送到服务器套接字并在服务器端读取它。 这是服务器
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!
有两件事是错的。第一个是bytearray不是完全来到服务器。其次,服务器调用线程两次。
任何输入都会有所帮助。如果有人发现问题,请告诉我!
答案 0 :(得分:1)
问题不在于发送/接收的内容,而是您尝试将其输出到控制台的方式。
数组不会覆盖toString()
。在您的服务器中,您有:
System.out.println("i = " + i + "b1 = " +b1);
b1.toString()
的输出是Object.toString()
的默认值,正如Object
的Javdoc中所述:
一个字符串,由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成。
您需要使用Arrays.toString(b1)
来获取一个String,该字符串将该数组中的实际字节显示为[ x, x, x ,x ]
(其中每个x
是字节的数值)