我有一个程序接受来自发送字节数组的电话的连接,我可以在制作时测试连接,但是我怎么知道我实际收到的东西?我怎么能“看到”是否有任何东西通过套接字发送。因为从我下面的代码中我无法创建生成的文件“saved.jpg”。这是否意味着它没有收到任何东西?
public class wpsServer {
//vars
private int svrPort = 3334;
private ServerSocket serverSocket;
private Image image = null;
public wpsServer()
{
try {
serverSocket = new ServerSocket(svrPort);
System.out.println("Server started on "+svrPort);
}
catch (IOException e) {
System.out.println("Could not listen on port: "+svrPort);
System.exit(-1);
}
}
public void listenForClient()
{
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
if(clientSocket.isConnected())
System.out.println("Connected");
byte[] pic = getPicture(clientSocket.getInputStream());
InputStream in = new ByteArrayInputStream(pic);
BufferedImage image = ImageIO.read(in);
File outputfile = new File("saved.jpg");
ImageIO.write(image, "jpg", outputfile);
}
catch (IOException e) {
System.out.println("Accept failed: "+svrPort);
System.exit(-1);
}
}
public byte[] getPicture(InputStream in) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int length = 0;
while ((length = in.read(data))!=-1) {
out.write(data,0,length);
}
return out.toByteArray();
} catch(IOException ioe) {
//handle it
}
return null;
}
}
答案 0 :(得分:0)
如果另一端关闭套接字,in.read
调用将仅返回-1
。当套接字处于活动状态时,该调用将阻塞,直到有更多数据可用。
您需要做的是更改“协议”:客户端应先发送数组大小,然后再发送数据。服务器应该读取该长度,并在完成后停止读取文件(例如,返回等待下一个文件)。