我的程序在下面,用户输入目标网址然后模拟HTTP格式进行发送,但老是收不到数据,不知道是怎么回事,哪位指点一下,谢谢:import java.net.URL;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.InetAddress;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.DataOutputStream;public class GetWeb {
private URL target; //目标网址
private String inputurl;
private String sendMessage;
private String receiveMessage;
private Socket client;
private DataOutputStream dos;
private BufferedReader read;
public GetWeb (String inputurl) {
this.inputurl = inputurl;
try {
setURL();
} catch (MalformedURLException e) {
System.out.println(e.getMessage());
}
}
//将用户输入的字符串网址转化成URL对象
private void setURL () throws MalformedURLException {
if (inputurl.startsWith("www.")) {
inputurl = "http://" + inputurl;
}
if (inputurl.substring(5, inputurl.length()).indexOf(":") == -1) {
inputurl += ":80";
}
int i = inputurl.indexOf(":");
target = new URL(inputurl);
}
//得到访问协议
public String getProtocol () {
return target.getProtocol();
}
//得到目标网址的主机名
public String getHost () {
return target.getHost();
}
//得到目标网址端口
public int getPort () {
return target.getPort();
}
//得到目标网址文件路径
public String getPath () {
return target.getPath();
}
//与目标网址建立Socket通信及输入输出流
public void getConnect () throws Exception {
try {
client = new Socket(InetAddress.getByName(getHost()), getPort());
dos = new DataOutputStream(client.getOutputStream());
read = new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("Good Luck");
}
}
//发送HTTP请求
public void sendMessage () {
try {
sendMessage = "GET :" + getProtocol() + getHost() + getPort() + " HTTP/1.1\r\n";
sendMessage += "HOST: " + getHost() + "\r\n";
sendMessage += "Connection: close\r\n";
sendMessage += "User-agent: IE6.0\r\n Accept-language: zh-cn\r\n";
sendMessage += "Accept: www/source; text/html; image/gif; */*\r\n";
dos.writeBytes(sendMessage);
dos.flush();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
//接收HTTP响应
public void receiveMessage () {
try {
receiveMessage = read.readLine();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
//主函数
public static void main(String[] args) {
String inputurl = null;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
inputurl = br.readLine();
GetWeb gw = new GetWeb(inputurl);
gw.getConnect();
gw.sendMessage();
gw.receiveMessage();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.InetAddress;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.DataOutputStream;public class GetWeb {
private URL target; //目标网址
private String inputurl;
private String sendMessage;
private String receiveMessage;
private Socket client;
private DataOutputStream dos;
private BufferedReader read;
public GetWeb (String inputurl) {
this.inputurl = inputurl;
try {
setURL();
} catch (MalformedURLException e) {
System.out.println(e.getMessage());
}
}
//将用户输入的字符串网址转化成URL对象
private void setURL () throws MalformedURLException {
if (inputurl.startsWith("www.")) {
inputurl = "http://" + inputurl;
}
if (inputurl.substring(5, inputurl.length()).indexOf(":") == -1) {
inputurl += ":80";
}
int i = inputurl.indexOf(":");
target = new URL(inputurl);
}
//得到访问协议
public String getProtocol () {
return target.getProtocol();
}
//得到目标网址的主机名
public String getHost () {
return target.getHost();
}
//得到目标网址端口
public int getPort () {
return target.getPort();
}
//得到目标网址文件路径
public String getPath () {
return target.getPath();
}
//与目标网址建立Socket通信及输入输出流
public void getConnect () throws Exception {
try {
client = new Socket(InetAddress.getByName(getHost()), getPort());
dos = new DataOutputStream(client.getOutputStream());
read = new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("Good Luck");
}
}
//发送HTTP请求
public void sendMessage () {
try {
sendMessage = "GET :" + getProtocol() + getHost() + getPort() + " HTTP/1.1\r\n";
sendMessage += "HOST: " + getHost() + "\r\n";
sendMessage += "Connection: close\r\n";
sendMessage += "User-agent: IE6.0\r\n Accept-language: zh-cn\r\n";
sendMessage += "Accept: www/source; text/html; image/gif; */*\r\n";
dos.writeBytes(sendMessage);
dos.flush();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
//接收HTTP响应
public void receiveMessage () {
try {
receiveMessage = read.readLine();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
//主函数
public static void main(String[] args) {
String inputurl = null;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
inputurl = br.readLine();
GetWeb gw = new GetWeb(inputurl);
gw.getConnect();
gw.sendMessage();
gw.receiveMessage();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
解决方案 »
- 谁能告诉我 可不可以在页面手动捕获struts2.0的验证错误 ,如果可以又怎么捕获呢
- 急救!js动态设置标签name
- 问一下,从MS SQL 数据库中提取预先存进的二进制的Word文件(image字段中),然后在一页面上提供下载或者打开
- excel web控件:怎样让数据在一个单元格中换行显示????
- 怎么实现打印功能
- 使用jspsmartupload中遇到的问题
- jsp连接数据库的问题
- 请教:JSP中如何删除数据库表中的信息
- tomcat连接mysql数据库的问题?
- 乱码新问题
- 是我的web.xml配置有问题吗?
- 50分:ResultSet rs=st.executeQuery();//这个地方没参数怎么不行呀
sendMessage += "HOST: " + getHost() + "\r\n";
sendMessage += "Connection: close\r\n";
sendMessage += "User-agent: IE6.0\r\n Accept-language: zh-cn\r\n";
sendMessage += "Accept: www/source; text/html; image/gif; */*\r\n";// 最后再换一次行,表示结束
sendMessage += "\r\n"
GET / HTTP/1.1
Host: www.sohu.com(两次回车 - 表示结束)
就可以得到 www.sohu.com 首页的内容。