?? xwebserver.java
字號:
/**
*"第五章 JXTA深入編程" 即時消息軟件XWeb
@描述 利用P2PSocket 將網(wǎng)站信息發(fā)布到P2P網(wǎng)絡(luò)
*/
import java.io.*;
import java.net.*;
import net.jxta.pipe.*;
import net.jxta.impl.endpoint.*;
import demo.p2psocket.*;
//源程序 XWebServer.java
public class XWebServer implements PipeMsgListener {
P2PSocket pps=new P2PSocket();
BaseMessage bm=new BaseMessage();
String default_url="http://127.0.0.1:8080/demo/";
public XWebServer() {
pps.setInputPipeName("001s");
pps.setInListener(this);
pps.bind();
}
/**
* 實現(xiàn)InputPipe 的監(jiān)聽器
* @param event 獲得消息事件
*/
public void pipeMsgEvent ( PipeMsgEvent event ){
String temp=null;
MessageImpl mi=(MessageImpl) event.getMessage();
temp=mi.getString(bm.WEB_MESSAGE_TYPE);
if (temp.equals(bm.WEB_REQUEST))
{ doWEBRequest(mi); return;}
if (temp.equals(bm.WEB_REQUEST_FIRST))
{ doWebRequestFirst(mi);return;}
}
/**
* 處理Web頁面的請求,將Web頁面的內(nèi)容讀入流中發(fā)送到連入方
* @param mi 獲得的Message
*/
public void doWEBRequest(MessageImpl mi) {
System.out.println("捕獲一個網(wǎng)站內(nèi)容請求!");
String url=mi.getString(bm.WEB_URL);
pps.send(bm.newWEBMessage(url2stream(url),pps.getOutputPipeName(),
pps.getInputPipeName(),bm.WEB_CONTENT,"Temp"));
}
/**
* 處理第一次連接的請求,在獲得連接方的PipeAdvertisment后與其建立連接,發(fā)送首頁
* @param mi 獲得的Message
*/
public void doWebRequestFirst(MessageImpl mi) {
System.out.println("捕獲一個首次連接請求!");
MessageElementImpl mei=(MessageElementImpl)mi.getElement(bm.WEB_REQUEST_FIRST);
String file_name=mi.getString(bm.WEB_URL);
saveAdv(mei.getStream(),file_name);
pps.setOutputPipeName(file_name);
pps.setOutListener(pps);
pps.connect(file_name);
pps.send(bm.newWEBMessage(url2stream(null),pps.getOutputPipeName(),
pps.getInputPipeName(),bm.WEB_CONTENT,"Temp"));
}
/**
* 把流中的信息寫道文件中
* @param is 數(shù)據(jù)源流
* @param fname 將要寫入的文件
*/
public void saveAdv(InputStream is,String fname) {
int length;
byte buf[]=new byte[1024];
try {
FileOutputStream fos=new FileOutputStream("adv/"+fname+".xml");
BufferedOutputStream bos=new BufferedOutputStream(fos);
BufferedInputStream bis=new BufferedInputStream(is);
while ((length=bis.read(buf,0,1024))!=-1) {
bos.write(buf,0,length);
bos.flush();
}
bis.close();
bos.close();
fos.close();
}catch (IOException ioe) {
System.out.println("寫入文件錯誤:"+ioe);
}
}
/**
* 把指定的 URL中的內(nèi)容讀入流中
* @param 指定的url
* @return 返回url得到的流
*/
public InputStream url2stream(String url) {
try {
String a=default_url;
if (url!=null) a=a+url;
System.out.println(a);
URL link=new URL(a);
return link.openStream();
}catch (Exception e) {
System.err.println("出錯!");
System.exit(-1);
}
return null;
}
public static void main(String args[]) {
XWebServer xwebs=new XWebServer();
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -