用法: 在本机或者其他主机,甚至手机浏览器中输入主机的URL地址即可。此代码还没有容错功能,后序完善,但现在已可以用。
本文的重点是怎样读取http客户端即浏览器发送的首部,怎样创建http服务器端即你的PC主机,发送的首部和数据区,理解http的socket编程。照这个思路就可以轻松编写网络b/w ,c/w程序了,只要重新编写客户端,服务器端首部中host的地址就可完成如翻墙程序,端口映射,转换,网段通联,网络透传,甚至自己的路由器,wifi ap。。。。一切的一切,老王咋一下就开窍了,哈哈哈哈。。。。
效果图片:
全部代码
import java.net.*;
import java.io.*;
import java.util.Scanner;
public class Inetaddress {
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(8000);
while(true) {
Socket sc=ss.accept();
// 读客户端发来请求的首部数据,找到 Host: localhost:8000 在第(2)行 http首部与数据区分割符为rnrn
System.out.println("socket linking");
InputStream is=sc.getInputStream();
Scanner sn=new Scanner(is);
String st="";
String zz="";
for(st=sn.nextLine();st!="";st=sn.nextLine()) {
if(st.indexOf("GET")>=0) {
if(st.indexOf("HTTP/1.1")>0) {
zz=st.substring(4,(st.indexOf("HTTP/1.1")-1));
zz=zz.trim();
}
}
}
OutputStream os=sc.getOutputStream();
// String s="HTTP/1.1 200 oknnHello worldn";
os.write(("HTTP/1.1 200rnrn").getBytes());
os.flush();
//读一个目录
if(zz.indexOf("favicon.ico")<0) { //pc的chrome 和 华为浏览器 要发送favicon.ice
if((zz.indexOf("."))<0) { //文件名都带'.'
// System.out.println(zz);
File fl=new File(zz);
String[] a=fl.list();
if(a!=null) {
for(String h:a) {
os.write(h.getBytes());
os.write('n');
os.flush();
}
}
os.close();
} else {
//读一个文件
if(zz!="") {
FileInputStream fs=new FileInputStream(zz);
int k;
for(k=fs.read();k!=-1;k=fs.read()) {
os.write(k);
os.flush();
}
os.close();
}
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}



