首页 > 代码库 > JAVA进阶-网络编程

JAVA进阶-网络编程

>通过套接字连接服务器
Socket指代套接字


>读取任意网站的首页
---------

[java] view plaincopyprint?
  1. /** 
  2.  *  @author Lean  @date:2014-10-9   
  3.  */  
  4. public class SocketSample {  
  5.       
  6.     public static void main(String[] args) {  
  7.         BufferedWriter writer=null;  
  8.         Socket socket=null;  
  9.         try {  
  10.             while (true) {  
  11.                 try {  
  12.                     Thread.sleep(1000);  
  13.                 } catch (InterruptedException e) {  
  14.                     e.printStackTrace();  
  15.                 }  
  16.                 socket=new Socket("localhost",8080);  
  17.                 OutputStream outputStream=socket.getOutputStream();  
  18.                 outputStream.write("GET / HTTP/1.0\n\n".getBytes());  
  19.                 BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  20.                 writer=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:/Users/Administrator/Desktop/TheadSample.html")));  
  21.                 String appendStr=null;  
  22.                 while ((appendStr=reader.readLine()) != null) {  
  23. //                  System.out.println(appendStr);  
  24.                     writer.write(appendStr);  
  25.                 }  
  26.                 writer.close();  
  27.                 reader.close();  
  28.             }  
  29.         } catch (UnknownHostException e) {  
  30.             e.printStackTrace();  
  31.         } catch (IOException e) {  
  32.             e.printStackTrace();  
  33.         }finally{  
  34.             if (socket!=null) {  
  35.                 try {  
  36.                     socket.close();  
  37.                 } catch (IOException e) {  
  38.                     e.printStackTrace();  
  39.                 }  
  40.             }  
  41.         }  
  42.           
  43.           
  44.           
  45.     }  
  46.       
  47. }  

---------
>通过url下载任意网页
---------

[java] view plaincopyprint?
  1. /** 
  2.  *  @author Lean  @date:2014-10-9   
  3.  */  
  4. public class URLSample {  
  5.       
  6.     public static void main(String[] args) {  
  7.           
  8.         try {  
  9.             URL url=new URL("HTTP","www.baidu.com",80,"");  
  10. //          URL url=new URL("http://www.baidu.com");  
  11.             HttpURLConnection connection=(HttpURLConnection) url.openConnection();  
  12.             connection.connect();  
  13.             InputStream is=connection.getInputStream();  
  14.             byte[] buff=new byte[1024];  
  15.             int length=0;  
  16.             while ((length=is.read(buff))!=-1) {  
  17.                 System.out.println(new String(buff));  
  18.             }  
  19.         } catch (MalformedURLException e) {  
  20.             e.printStackTrace();  
  21.         } catch (IOException e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.           
  25.           
  26.     }  
  27.       
  28. }  

---------
>检测网站传入的cookie信息
---------

[java] view plaincopyprint?
  1. /** 
  2.  *  @author Lean  @date:2014-10-9   
  3.  */  
  4. public class HttpCookieSample {  
  5.       
  6.     /** 
  7.      * @param args 
  8.      */  
  9.     public static void main(String[] args) {  
  10.         CookieManager manager=new CookieManager();  
  11.         manager.setCookiePolicy(new CustomerPolicy());  
  12.         CookieHandler.setDefault(manager);  
  13.         try {  
  14.             URL url=new URL("http://www.baidu.com");  
  15.             URLConnection conn=url.openConnection();  
  16.             Object content=conn.getContent();  
  17.             List<HttpCookie> cookies=manager.getCookieStore().getCookies();  
  18.             for (HttpCookie httpCookie : cookies) {  
  19.                 System.out.println(httpCookie.getName()+"  "+httpCookie.getValue()+"    "+httpCookie.getDomain());  
  20.                 printCookieLiveAge(httpCookie);  
  21.                 System.out.println("Cookie secured:"+httpCookie.getSecure());  
  22.                 System.out.println("...........");  
  23.                   
  24.             }  
  25.         } catch (MalformedURLException e) {  
  26.             e.printStackTrace();  
  27.         } catch (IOException e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.           
  31.     }  
  32.   
  33.     private static void printCookieLiveAge(HttpCookie httpCookie) {  
  34.         long age=httpCookie.getMaxAge();  
  35.         SimpleDateFormat df=new SimpleDateFormat("HH:mm:ss");  
  36.         System.out.println(age!=-1?"Cookie will expire when close ":"Cookie age is:"+df.format(age));  
  37.     }  
  38.       
  39.     static class CustomerPolicy implements CookiePolicy{  
  40.   
  41.         @Override  
  42.         public boolean shouldAccept(URI uri, HttpCookie cookie) {  
  43.             return true;  
  44.         }  
  45.           
  46.     }  
  47.       
  48. }  

---------
>编写同时服务多个客户端的服务器程序
---------

[java] view plaincopyprint?
  1. /** 
  2.  *  @author Lean  @date:2014-10-9   
  3.  */  
  4. public class ServerSocketSample {  
  5.       
  6.     private static ServerSocket server=null;  
  7.       
  8.     public static void main(String[] args) {  
  9.           
  10.         try {  
  11.             server=new ServerSocket(8080);  
  12.             ExecutorService pool=Executors.newFixedThreadPool(3);  
  13.             while (true) {  
  14.                 Socket socketObject= server.accept();  
  15.                 pool.submit(new CustomRunnable(socketObject));  
  16.             }  
  17.         } catch (IOException e) {  
  18.             e.printStackTrace();  
  19.         }  
  20.     }  
  21.       
  22.     static class CustomRunnable implements Runnable{  
  23.           
  24.         byte[] buff=new byte[512];  
  25.         private Socket socketObject;  
  26.         public CustomRunnable(Socket socketObject) {  
  27.             this.socketObject=socketObject;  
  28.         }  
  29.   
  30.         @Override  
  31.         public void run() {  
  32.             try {  
  33.                 System.out.println("Thread ID>>"+Thread.currentThread().getId());  
  34.                 InputStream stream=socketObject.getInputStream();  
  35.                 stream.read(buff);  
  36.                 OutputStream os=socketObject.getOutputStream();  
  37.                 os.write(buff);  
  38.                 socketObject.close();  
  39.             } catch (IOException e) {  
  40.                 e.printStackTrace();  
  41.             }  
  42.         }  
  43.     }  
  44.       
  45. }  

---------
>编写实际的文件存储服务器程序
---------

StorgeServerSample

[java] view plaincopyprint?
  1. /** 
  2.  *  @author Lean  @date:2014-10-10   
  3.  */  
  4. public class StorgeServerSample {  
  5.       
  6.     public static void main(String[] args) {  
  7.         ServerSocket socket=null;  
  8.         ExecutorService service=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());  
  9.         try {  
  10.             socket=new ServerSocket(8080);  
  11.             try {  
  12.                 while (true) {  
  13.                     Socket socketObject=socket.accept();  
  14.                     service.submit(new RequestRunnable(socketObject));  
  15.                 }  
  16.             } finally{  
  17.                 socket.close();  
  18.             }  
  19.         } catch (IOException e) {  
  20.             e.printStackTrace();  
  21.         }  
  22.           
  23.     }  
  24.       
  25.     static class RequestRunnable implements Runnable{  
  26.           
  27.         private Socket requestSocket;  
  28.   
  29.         public RequestRunnable(Socket socketObject) {  
  30.             requestSocket=socketObject;  
  31.         }  
  32.   
  33.         @Override  
  34.         public void run() {  
  35.             try {  
  36.                 DataInputStream dataIs=new DataInputStream(requestSocket.getInputStream());  
  37.                 DataOutputStream dataOs=new DataOutputStream(requestSocket.getOutputStream());  
  38.                 int cmd=dataIs.readInt();  
  39.                 String message=cmd==0?"Put ":"Get ";  
  40.                 String fileName=dataIs.readUTF();  
  41.                 message+=fileName+" REQUEST";  
  42.                 fileName="C:/Documents and Settings/Administrator/桌面/Server.txt";  
  43.                 if (cmd==0) {  
  44.                     uploadFile(dataIs,fileName);  
  45.                 }else {  
  46.                     downFile(dataOs,fileName);  
  47.                 }  
  48.             } catch (IOException e) {  
  49.                 e.printStackTrace();  
  50.             }  
  51.               
  52.         }  
  53.   
  54.         private void uploadFile(DataInputStream dataIs, String fileName) {  
  55.             try {  
  56.                 BufferedWriter writer=new BufferedWriter(new FileWriter(fileName));  
  57.                 String tempStr;  
  58.                 while (!(tempStr=dataIs.readUTF()).equals("-1")) {  
  59.                     writer.write(tempStr);  
  60.                     writer.newLine();  
  61.                 }  
  62.                 writer.close();  
  63.                 dataIs.close();  
  64.             } catch (IOException e) {  
  65.                 e.printStackTrace();  
  66.             }  
  67.         }  
  68.   
  69.         private void downFile(DataOutputStream dataOs, String fileName) {  
  70.             try {  
  71.                 BufferedReader reader=new BufferedReader(new FileReader(fileName));  
  72.                 String tempStr=null;  
  73.                 while ((tempStr=reader.readLine())!=null) {  
  74.                     dataOs.writeUTF(tempStr);  
  75.                 }  
  76.                 dataOs.writeUTF("-1");  
  77.                 dataOs.close();  
  78.                 reader.close();  
  79.             } catch (FileNotFoundException e) {  
  80.                 e.printStackTrace();  
  81.             } catch (IOException e) {  
  82.                 e.printStackTrace();  
  83.             }  
  84.         }  
  85.           
  86.     }  
  87.       
  88. }  

---------

StorgeClientSample

[java] view plaincopyprint?
  1. public class StorgeClientSample {  
  2.       
  3.     public static void main(String[] args) {  
  4.           
  5.         int cmd=1;  
  6.         try {  
  7.             Socket requestScoket=new Socket();  
  8.             requestScoket.connect(new InetSocketAddress("localhost",8080));  
  9.             if (cmd==0) {  
  10.                 String fileName="C:/Documents and Settings/Administrator/桌面/Test.txt";  
  11.                 BufferedReader reader=new BufferedReader(new FileReader(fileName));  
  12.                 DataOutputStream dataOs=new DataOutputStream(requestScoket.getOutputStream());  
  13.                 dataOs.writeInt(cmd);  
  14.                 dataOs.writeUTF(fileName);  
  15.                 String tempStr;  
  16.                 while ((tempStr=reader.readLine())!=null) {  
  17.                     System.out.println(tempStr);  
  18.                     dataOs.writeUTF(tempStr);  
  19.                 }  
  20.                 dataOs.writeUTF("-1");  
  21.                 dataOs.close();  
  22.                 reader.close();  
  23.             }else {  
  24.                 String fileName="C:/Documents and Settings/Administrator/桌面/Down.txt";  
  25.                 BufferedWriter writer=new BufferedWriter(new FileWriter(fileName));  
  26.                 DataOutputStream dataOs=new DataOutputStream(requestScoket.getOutputStream());  
  27.                 dataOs.writeInt(cmd);  
  28.                 dataOs.writeUTF(fileName);  
  29.                 DataInputStream dataIs=new DataInputStream(requestScoket.getInputStream());  
  30.                 String tempStr;  
  31.                 while (!(tempStr=dataIs.readUTF()).equalsIgnoreCase("-1")) {  
  32.                     System.out.println(tempStr);  
  33.                     writer.write(tempStr);  
  34.                     writer.newLine();  
  35.                 }  
  36.                 dataIs.close();  
  37.                 writer.close();  
  38.             }  
  39.         } catch (IOException e) {  
  40.             e.printStackTrace();  
  41.         }  
  42.           
  43.     }  
  44.       
  45. }  

---------

>创建多电波服务器和客户端

---------

StockTradesServer

[java] view plaincopyprint?
  1. /** 
  2.  *  @author Lean  @date:2014-10-11   
  3.  */  
  4. public class StockTradesServer {  
  5.       
  6.     public static void main(String[] args) {  
  7.         Thread stockSThread=new Thread(new StockTradeGenerator());  
  8.         stockSThread.setDaemon(true);  
  9.         stockSThread.start();  
  10.         try {  
  11.             Thread.sleep(30000);  
  12.         } catch (InterruptedException e) {  
  13.         }  
  14.     }  
  15.       
  16.     static class StockTradeGenerator implements Runnable{  
  17.           
  18.         private DatagramSocket broadcastSocket;  
  19.         private String[] stockSymbols ={"IBM","SNE","XRX","MHP","NOK"};  
  20.           
  21.         public StockTradeGenerator() {  
  22.             try {  
  23.                 broadcastSocket=new DatagramSocket(4445);  
  24.             } catch (SocketException e) {  
  25.                 System.out.println("error create socket ! ");  
  26.             }  
  27.         }  
  28.           
  29.         @Override  
  30.         public void run() {  
  31.             byte[] buff=new byte[126];  
  32.             try {  
  33.                 while (true) {  
  34.                     int index=(int) (Math.random()*5);  
  35.                     float trade=generatorRandomTrade(index);  
  36.                     String tempStr=String.format("%s %.2f@ %s",stockSymbols[index],trade,now());  
  37.                     buff=tempStr.getBytes();  
  38.                     InetAddress groupInetAddresses;  
  39.                         groupInetAddresses = InetAddress.getLocalHost();  
  40.                     DatagramPacket datagramPacket=new DatagramPacket(buff,buff.length, groupInetAddresses,4446);  
  41.                     broadcastSocket.send(datagramPacket);  
  42.                     Thread.sleep(500);  
  43.                 }  
  44.             } catch (UnknownHostException e) {  
  45.                 e.printStackTrace();  
  46.             } catch (IOException e) {  
  47.                 e.printStackTrace();  
  48.             } catch (InterruptedException e) {  
  49.                 e.printStackTrace();  
  50.             }finally{  
  51.                 broadcastSocket.close();  
  52.             }  
  53.         }  
  54.           
  55.     }  
  56.   
  57.     public static float generatorRandomTrade(int index) {  
  58.         float trade=(float) Math.random();  
  59.         switch (index) {  
  60.             case 0:  
  61.                 trade+=118;  
  62.                 break;  
  63.             case 1:  
  64.                 trade+=29;  
  65.                 break;  
  66.             case 2:  
  67.                 trade+=8;  
  68.                 break;  
  69.             case 3:  
  70.                 trade+=26;  
  71.                 break;  
  72.             case 4:  
  73.                 trade+=14;  
  74.                 break;  
  75.             default:  
  76.                 break;  
  77.         }   
  78.         return trade;  
  79.     }  
  80.   
  81.     public static Object now() {  
  82.         SimpleDateFormat df=new SimpleDateFormat("HH:mm:ss");  
  83.         Date date=new Date();  
  84.         return df.format(date);  
  85.     }  
  86.       
  87. }  

---------

StockTradeClient

[java] view plaincopyprint?
    1. /** 
    2.  *  @author Lean  @date:2014-10-11   
    3.  */  
    4. public class StockTradeClient {  
    5.   
    6.     public static void main(String[] args) throws IOException {  
    7.         MulticastSocket multicastSocket=new MulticastSocket(4446);  
    8.         InetAddress address=InetAddress.getByName("232.0.1.1");  
    9.         multicastSocket.joinGroup(address);  
    10.         for (int i = 0; i < 10; i++) {  
    11.             byte[] buff=new byte[256];  
    12.             DatagramPacket datagramPacket=new DatagramPacket(buff,buff.length);  
    13.             multicastSocket.receive(datagramPacket);  
    14.             System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength()));  
    15.         }  
    16.         multicastSocket.leaveGroup(address);  
    17.         multicastSocket.close();  
    18.     }  
    19.       

JAVA进阶-网络编程