一段小程序,为何运行结果与教科书不一样?

纹枰老妖 2020-06-24 10:34:14
比着教科书抄了一段代码,如下所示:
import java.io.*;
import java.net.*;
public class TestURLConnection {
public static void main(String args[]){
String s;
try{
URL myURL = new URL("http://ym/cgi/java? answer.class");
URLConnection myURLConnection = myURL.openConnection();
PrintStream ps = new PrintStream(myURLConnection.getOutputStream());
BufferedReader dis = new BufferedReader(
new InputStreamReader(myURLConnection.getInputStream()));
ps.println("Hello, This is a test!");
ps.close();
while(null != (s = dis.readLine())){
System.out.println(s);
}
dis.close();
}catch(MalformedURLException e){
System.out.println("URL in wrong form, check it again!");
}catch(IOException e){
System.out.println("IO Exception ocurred when get information");
}
}
}

编译好再执行,按理说正确结果,应该是在控制台上显示【Hello, This is a test!】,但为何我在机器上运行后,实际效果却如图所示:

...全文
13791 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
行云边 2020-07-13
  • 打赏
  • 举报
回复
引用 9 楼 纹枰老妖 的回复:
[quote=引用 7 楼 行云边 的回复:]1.url不对 2.注释掉所以 ps变量。因为这个例子是post,需要服务端代码配合。除非你把示例的answer.class部署到服务端。 3.http请求建议使用httpclient。这个比原生的好用而且稳定。
谢谢您的回答,前段时间出了点小事,所以未能及时回复,见谅。 但您的第二段的第一句话我看不懂,能否详细点说?[/quote] 就是说你不需要ps变量。你的代码ps变量是用来发送数据给服务端的。但是服务端需要能接收你的发送的数据。所以要不你不发送数据,要不你部署answer.class部署到服务端来接收数据。
qq_39936465 2020-07-06
  • 打赏
  • 举报
回复
引用 楼主 纹枰老妖 的回复:
比着教科书抄了一段代码,如下所示:
import java.io.*;
import java.net.*;
public class TestURLConnection {
	public static void main(String args[]){
		String s;
		try{
			URL myURL = new URL("http://ym/cgi/java? answer.class");
			URLConnection myURLConnection = myURL.openConnection();
			PrintStream ps = new PrintStream(myURLConnection.getOutputStream());
			BufferedReader dis = new BufferedReader(
					new InputStreamReader(myURLConnection.getInputStream()));
			ps.println("Hello, This is a test!");
			ps.close();
			while(null != (s = dis.readLine())){
				System.out.println(s);
			}
			dis.close();
		}catch(MalformedURLException e){
			System.out.println("URL in wrong form, check it again!");
		}catch(IOException e){
			System.out.println("IO Exception ocurred when get information");
		}
	}
}
编译好再执行,按理说正确结果,应该是在控制台上显示【Hello, This is a test!】,但为何我在机器上运行后,实际效果却如图所示:
url不能随便乱用。 URL myURL = new URL("http://ym/cgi/java? answer.class");这句是引用http://ym/cgi/java? answer.class 地址的answer.class类,教科书上可以显示,但是你的电脑上有这个类么?,url的地址是否正确? 你先好好学习一下url到底该怎么用吧。
胖到没有朋友 2020-07-06
  • 打赏
  • 举报
回复
引用 10 楼 纹枰老妖 的回复:
[quote=引用 8 楼 胖到没有朋友 的回复:] 我测了一下,报错是因为这一行,错误原因上面写了 ,因为这个网站不允许输出流,所以你获取不到对应的输出流
谢谢您的测试!请问您的那句“网站不允许输出流”,意思是指哪个【百度】网站不允许输出流吗?[/quote]你在获取输出流之前加上这个代码 myURLConnection.setDoOutput(true); 就可以了,但是我测试了 拿到的是空串,这个问题我就不知道了
纹枰老妖 2020-07-06
  • 打赏
  • 举报
回复
引用 8 楼 胖到没有朋友 的回复:

我测了一下,报错是因为这一行,错误原因上面写了 ,因为这个网站不允许输出流,所以你获取不到对应的输出流

谢谢您的测试!请问您的那句“网站不允许输出流”,意思是指哪个【百度】网站不允许输出流吗?
纹枰老妖 2020-07-06
  • 打赏
  • 举报
回复
引用 7 楼 行云边 的回复:
1.url不对
2.注释掉所以 ps变量。因为这个例子是post,需要服务端代码配合。除非你把示例的answer.class部署到服务端。
3.http请求建议使用httpclient。这个比原生的好用而且稳定。

谢谢您的回答,前段时间出了点小事,所以未能及时回复,见谅。
但您的第二段的第一句话我看不懂,能否详细点说?
胖到没有朋友 2020-06-30
  • 打赏
  • 举报
回复
我测了一下,报错是因为这一行,错误原因上面写了 ,因为这个网站不允许输出流,所以你获取不到对应的输出流
行云边 2020-06-28
  • 打赏
  • 举报
回复
1.url不对 2.注释掉所以 ps变量。因为这个例子是post,需要服务端代码配合。除非你把示例的answer.class部署到服务端。 3.http请求建议使用httpclient。这个比原生的好用而且稳定。
纹枰老妖 2020-06-26
  • 打赏
  • 举报
回复
我源代码都写好了,谁能费神在自己的机器上试一下吗?谢谢了
纹枰老妖 2020-06-25
  • 打赏
  • 举报
回复
引用 3 楼 梁聪俊 的回复:
Url是网址,你换一个适一下

网址换成本网页网址【https://bbs.csdn.net/topics/396912763】,编译好再运行,错误还是那样,如下图:
梁聪俊 2020-06-25
  • 打赏
  • 举报
回复
Url是网址,你换一个适一下
纹枰老妖 2020-06-25
  • 打赏
  • 举报
回复
引用 1 楼 tianfang 的回复:
这个网络url不存在

谢谢。但教科书上的URL,也会是错误的吗?
tianfang 2020-06-24
  • 打赏
  • 举报
回复
这个网络url不存在

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧