用法: 在本机或者其他主机,甚至手机浏览器中输入主机的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(); } } }