0
我正在写一个简单的socket程序,如下图所示。我想发送一个字节数组到服务器套接字并在服务器端读取它。 这是服务器java socket不接受字节数组
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 = [[email protected]
Waiting for client on port 6066...
Socket timed out!
有两件事是错误的。第一个是字节数组不完全来自服务器。其次,服务器正在调用线程两次。
任何输入都会有帮助。请让我知道是否有人发现问题!
如果你改变的System.out.println实际字节(” i =“+ i +”b1 =“+ b1);使用System.out.println(“i =”+ i +“b1 =”+ b1.toString());你会看到你的第一个问题不存在 – wxyz
@wxyz。对。我是4的事实已经是一个好兆头......但你可能需要像Arrays.toString(b1)这样的东西。 ... + b1)已经和...一样了+ + b1.toString()) –
愚蠢的错误!我得到了字节阵列。这两个线程执行的任何原因? – kavita