错误信息Exception in thread "main" java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:766)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
at com.xiang.Main.main(Main.java:26)
代码
package com.xiang;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
/**
@author Dana·Li
/
public class Main{
private static String urlPath="http://127.0.0.1:8001";
/*
@throws IOException
*/
public static void main(String[] args) throws IOException {
//ServerFactory.getServer(8080).start();
//列出原始数据
StringBuilder json = new StringBuilder();
URL oracle = new URL(Main.urlPath);
URLConnection yc = oracle.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(),"UTF-8"));
String inputLine = null;
while ( (inputLine = in.readLine()) != null){
json.append(inputLine);
}
in.close();
String Strjson=json.toString();
System.out.println("原始数据:");
System.out.println(Strjson.toString());
}
}
你题意理解错了。
首先你看他这个所谓的模拟定位服务接口:
注意看鼠标的位置会转换成为这个地图上的坐标。你看看你下载这个接口的网页说明。
你需要做的是把这个地图转换为数字地图,当用户拿着手机,开着你的app,就有一个定位信息。
所谓模拟接口,给你提供一个示例,示例中是鼠标位置, 那么你实现中就是手机位置。
你需要做的是把用户的定位信息映射到坐标系中,用户关注的点:航站楼、免税店、地下一层等你都需要把坐标做出来。
比如用户要去航站楼1号(坐标 x=0.5,y=0.3,z=1),而你现在所处的位置是(坐标x=0.2,y=0.3,z=-1),你在负一层。
那么用户可能会开启麦克风,问你这个app:”我要去航站楼1号“,或者它将航站楼1号标记为目的地。
现在你要做的是给用户规划路线,然后画在你这个app的地图上。
没连上服务器,连接超时等等...
看看你的8080端口是否被防火墙阻止了。
看看你的服务器“http://127.0.0.1:8001"是否能通过浏览器正常访问。
java.net.SocketException: Unexpected end of file from server 这个异常说明数据已经发送成功。有可能服务端是防火墙的原因,没有处理客户端发来的数据。也有可能是客户端的数据不符合要求,服务端没有做出响应。数据不符合要求可能是传送的数据含有奇怪的字符或者没有发送请求数据。
我猜测应该不是防火墙的问题,而可能是你这个http://127.0.0.1:8001请求是一个post请求,需要发送请求数据后,才能收到响应。
建议检查http://127.0.0.1:8001这个请求的请求参数,貌似是oracle数据库连接吧,然后修改代码发送请求参数如用户名密码之类的。
示例代码:
public class Main {
private static String urlPath = "http://127.0.0.1:8080";
public static void main(String[] args) throws IOException {
StringBuilder json = new StringBuilder();
URL oracle = new URL(Main.urlPath);
URLConnection yc = oracle.openConnection();
//写入请求参数如用户名密码之类的
String content = "username=admin&password=123456";
if (null != content) {
OutputStream outputStream = yc.getOutputStream();
outputStream.write(content.getBytes("UTF-8"));
outputStream.close();
}
//接收服务器响应内容
BufferedReader in = new BufferedReader(new InputStreamReader(
yc.getInputStream(), "UTF-8"));
String inputLine = null;
while ((inputLine = in.readLine()) != null) {
json.append(inputLine);
}
in.close();
String Strjson = json.toString();
System.out.println("原始数据:");
System.out.println(Strjson.toString());
}
}
一般遇到这个问题,就是连接问题。
你connect了吗??
每次执行完程序
感觉又是python还是java的,你初学,还是用一种把。
server端开启了接收来自客户端的http请求,根据不同的方式GET/POST
来处理,并返回数据给客户端(浏览器、pc、mobile等)。
我看你是想自己写个客户端用URLConnection
来和服务端通讯,以下是这个类的介绍,我看你的代码中,从来都没有开启过这个connection
如果客户端这边没有问题。
那就是服务端的问题了。
请贴出这个图的server端代码,看这个图是权限问题引起:
接口下载地址http://www.cnsoftbei.com/bencandy.php?fid=45&aid=1214 location_server(x64)室内交互.rar
这个server没什么太大价值,就是给你模拟定位服务的。
你可以这样获取这个返回值,不过没什么意义。
URL url = new URL("http://localhost:8001/do?x=0.2&y=0.2&z=1");
然后server会返回1个json:
[0.0, 0.2, 1.0]
。