今天主要是完成了地图服务器的架设。前期的解析google地图的编码的代码已经是有的,现在就把一些遇到的问题写出来。
1.Java的Socket连接后的数据传输,因为一开始用的inputstream.readutf(),所以导致在和C的联调中出现了问题,后来改成了readline()暂时解决了问题,但总觉得不是很好,尝试了read(byte[])的方法。
2.Java中的绘制图片,就是在后台建立一个BufferImage,然后creategraphics(),然后进行绘图,基本上也就这样了。
绘图代码如下:
/** * @param _mapnames是9张地图的名字 * @return 成功是File文件 | 失败则是null */ private File drawMap(String[][] _mapdata) { File[][] mapfiles = new File[3][3]; File Map = new File("Map.png"); Image[][] mapImages = new Image[3][3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { mapfiles[i][j] = new File(_mapdata[i][j]); } } BufferedImage mapBufferedImage = new BufferedImage(SettingData.MAP_WIDTH, SettingData.MAP_HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics mapGraphics = mapBufferedImage.createGraphics(); try { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { mapImages[i][j] = ImageIO.read(mapfiles[i][j]); } } Image car = ImageIO.read(new File(SettingData.Car_PIC)); //----------------------------------------------- //区分开是为了要么一次画完,要么不画 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { mapGraphics.drawImage(mapImages[i][j], 256 * i, 256 * j, null); } } mapGraphics.drawImage(car, Integer.valueOf(_mapdata[3][0]), Integer.valueOf(_mapdata[3][1]), null); mapGraphics.dispose(); //Map.createNewFile(); ImageIO.write(mapBufferedImage, "PNG", Map); } catch (Exception e) { Map = null; e.printStackTrace(); } return Map; }
毕竟是张简单的图片。传递的方法还是socket连接标准的多线程。
3.对文件的写入和读取,写入的上面代码提到了:ImageIO.write();的方法。
读取的则是用的inputstream.read();发送则使用流发送。详细代码如下:
/** * @param _map是地图的文件 * @param _socket是发送目标的端口 * @return 表明是否发送成功 */ private boolean sendMap(File _map, Socket _socket) { try { OutputStream outputStream = _socket.getOutputStream(); byte[] MapFileByte = new byte[60000]; int amount; int sum = 0; RandomAccessFile sendMapFile = new RandomAccessFile(_map, "r"); while ((amount = sendMapFile.read(MapFileByte)) != -1) { outputStream.write(MapFileByte, 0, amount); sum += amount; System.out.println("已发送" + sum +"字节!"); } outputStream.flush(); System.out.println("清空缓冲区!"); outputStream.close(); return true; } catch (Exception e) { e.printStackTrace(); return false; } }
目前的一个问题就是对方不知道我已经发送结束,不会主动断开,然后必须得我这断开outputstream,所以比较郁闷。
完整代码,其实也没什么。。。。