所以我得到了一个Server.jar文件,它运行一个tic tac toe服务器。 我现在应该做的是通过TCP Socket连接到这个服务器 发送HTTP请求(例如“GET / game / HTTP / 1.1”),并接收tictactoe字段。
现在我似乎能够连接到服务器,并发送第一个请求。 然而,我的第二个out.write似乎被忽略或导致异常。 我不明白为什么......服务器似乎也没有响应第二条消息/请求。
Socket sock;
try
{
sock = new Socket("127.0.0.1",8080);
System.out.println("Connection established at "+sock.toString());
Scanner in = new Scanner(sock.getInputStream());//Step 2.
PrintWriter out =new PrintWriter(sock.getOutputStream(),true);//Step 2.
out.println("GET /game/ HTTP/1.1\nHost: 127.0.0.1\nConnection: keep-alive\n\n");
String test ="";
while( (in.hasNext())== true)
{
test = test + in.nextLine();
}
System.out.println(test);
//This one is ignored somehow.
out.println("GET /game/gamenumber HTTP/1.1\nHost: 127.0.0.1\n\n");
while( (in.hasNext())== true)
{
test = test + in.nextLine();
}
System.out.println(test);
out.close();
sock.close();
}
catch (IOException e)
{
System.out.println("Failed");
e.printStackTrace();
}
注意:我无法直接访问服务器源代码,因此不允许使用HTTPURLCONNECTION。
答案 0 :(得分:1)
java.net.SocketException:软件导致连接中止:套接字写入错误
这通常是由写入已被另一端关闭的连接引起的。由于您没有发送内容长度标头,因此服务器在第一次请求后关闭了连接。
HTTP中的行终止符是\ r \ n,而不是\ n。
您需要仔细查看HTTP 1.1协议RFC。或者使用HttpURLConnection,它将完全为您完成。除非这是家庭作业,并且你需要自己实现HTTP 1.1,这看起来很奇怪,否则你在JDK中使用实际上为这个问题设计的一个类也是奇怪的。
答案 1 :(得分:-2)
尝试在每次println后添加out.flush()。