【24】网络编程2_TCP并发上传图片和登录,Tomcat服务器,自定义IE,域名解析

来源:互联网 发布:优化方案答案物理答案 编辑:程序博客网 时间:2024/05/01 05:15

练习一:客户端把图片上传到服务器,服务器返回信息

 /*需求:上传图片。客户端。1,服务端点。2,读取客户端已有的图片数据。3,通过socket 输出流将数据发给服务端。4,读取服务端反馈信息。5,关闭。 */ import java.io.*;import java.net.*;class PicClient{         public static void main(String[] args)throws Exception         {                   Socket s = new Socket("192.168.1.254",10007);                    FileInputStream fis = new FileInputStream("c:\\1.bmp");                    OutputStream out = s.getOutputStream();                    byte[] buf = new byte[1024];                    int len = 0;                    while((len=fis.read(buf))!=-1)                   {                            out.write(buf,0,len);                   }                    //告诉服务端数据已写完                   s.shutdownOutput();                    InputStream in = s.getInputStream();                    byte[] bufIn = new byte[1024];                    int num = in.read(bufIn);                   System.out.println(newString(bufIn,0,num));                    fis.close();                   s.close();         }} /*服务端*/class PicServer{         public static void main(String[] args) throws Exception         {                   ServerSocket ss = new ServerSocket(10007);                    Socket s = ss.accept();                    InputStream in = s.getInputStream();                    FileOutputStream fos = new FileOutputStream("server.bmp");                    byte[] buf = new byte[1024];                    int len = 0;                   while((len=in.read(buf))!=-1)                   {                            fos.write(buf,0,len);                   }                    OutputStream out = s.getOutputStream();                    out.write("上传成功".getBytes());                    fos.close();                    s.close();                    ss.close();         }}


 

练习二:服务端开启多个线程完成多个客户端的迸发访问请求,并且在传文件前先判断文件是否符合服务器要求

 

 

/*需求:上传图片。   *//*客户端。1,服务端点。2,读取客户端已有的图片数据。3,通过socket 输出流将数据发给服务端。4,读取服务端反馈信息。5,关闭。 */ import java.io.*;import java.net.*;class PicClient{         public static void main(String[] args)throws Exception         {                   if(args.length!=1)                   {                            System.out.println("请选择一个jpg格式的图片");                            return;                   }                       File file = new File(args[0]);                   if(!(file.exists()&& file.isFile()))                   {                            System.out.println("该文件有问题,要么补存在,要么不是文件");                            return;                    }                    if(!file.getName().endsWith(".jpg"))                   {                            System.out.println("图片格式错误,请重新选择");                            return;                   }                    if(file.length()>1024*1024*5)                   {                            System.out.println("文件过大,没安好心");                            return;                   }                                        Socket s = new Socket("192.168.1.254",10007);                    FileInputStream fis = new FileInputStream(file);                    OutputStream out = s.getOutputStream();                    byte[] buf = new byte[1024];                    int len = 0;                    while((len=fis.read(buf))!=-1)                   {                            out.write(buf,0,len);                   }                    //告诉服务端数据已写完                   s.shutdownOutput();                    InputStreamin = s.getInputStream();                    byte[]bufIn = new byte[1024];                    intnum = in.read(bufIn);                   System.out.println(newString(bufIn,0,num));                    fis.close();                   s.close();         }} /*服务端 这个服务端有个局限性。当A客户端连接上以后。被服务端获取到。服务端执行具体流程。这时B客户端连接,只有等待。因为服务端还没有处理完A客户端的请求,还有循环回来执行下次accept方法。所以暂时获取不到B客户端对象。 那么为了可以让多个客户端同时并发访问服务端。那么服务端最好就是将每个客户端封装到一个单独的线程中,这样,就可以同时处理多个客户端请求。   如何定义线程呢? 只要明确了每一个客户端要在服务端执行的代码即可。将该代码存入run方法中。*/ class PicThread implements Runnable{          private Socket s;         PicThread(Sockets)         {                   this.s= s;         }         public void run()         {                    int count = 1;                   String ip  =s.getInetAddress().getHostAddress();                   try                   {                            System.out.println(ip+"....connected");                             InputStreamin = s.getInputStream();                             Filedir =  new File("d:\\pic");                             Filefile = new File(dir,ip+"("+(count)+")"+".jpg");                             while(file.exists())                                     file= new File(dir,ip+"("+(count++)+")"+".jpg");                             FileOutputStreamfos = new FileOutputStream(file);                             byte[]buf = new byte[1024];                             intlen = 0;                            while((len=in.read(buf))!=-1)                            {                                     fos.write(buf,0,len);                            }                             OutputStreamout = s.getOutputStream();                             out.write("上传成功".getBytes());                             fos.close();                             s.close();                   }                   catch(Exception e)                   {                            thrownew RuntimeException(ip+"上传失败");                   }         }}   class PicServer{         public static void main(String[] args) throws Exception         {                   ServerSocket ss = new ServerSocket(10007);                    while(true)                   {                            Socket s = ss.accept();                             new Thread(new PicThread(s)).start();                                      }                    //ss.close();         }}


 

练习三:自定义一个IE浏览器(只有Socket传输功能,没有解析功能)

                   用GUI图形化界面仿制一个IE浏览器

 

import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;class MyIEByGUI{         private Frame f;         private TextField tf;         private Button but;         private TextArea ta;                 private Dialog d;         private Label lab;         private Button okBut;           MyIEByGUI()         {                   init();         }         public void init()         {                   f = new Frame("my window");                   f.setBounds(300,100,600,500);                   f.setLayout(newFlowLayout());                    tf = new TextField(60);                    but = new Button("转到");                    ta = new TextArea(25,70);                     d = new Dialog(f,"提示信息-self",true);                   d.setBounds(400,200,240,150);                   d.setLayout(newFlowLayout());                   lab= new Label();                   okBut= new Button("确定");                    d.add(lab);                   d.add(okBut);                      f.add(tf);                   f.add(but);                   f.add(ta);                     myEvent();                   f.setVisible(true);         }         private void  myEvent()         {                    okBut.addActionListener(new ActionListener()                   {                            public void actionPerformed(ActionEvent e)                            {                                     d.setVisible(false);                            }                   });                   d.addWindowListener(new WindowAdapter()                   {                            public void windowClosing(WindowEvent e)                            {                                     d.setVisible(false);                            }                   });                    tf.addKeyListener(newKeyAdapter()                   {                            public void keyPressed(KeyEvent e)                            {                                     try                                     {                                                        if(e.getKeyCode()==KeyEvent.VK_ENTER)                                               showDir();                                     }                                     catch(Exception ex)                                     {                                     }                                                       }                   });                     but.addActionListener(newActionListener()                   {                            public void actionPerformed(ActionEvent e)                            {                                     try                                     {                                               showDir();                                     }                                     catch(Exception ex)                                     {                                     }                                                                                                    }                   });                    f.addWindowListener(newWindowAdapter()                   {                            public void windowClosing(WindowEvent e)                            {                                     System.exit(0);                                    }                   });         }          private void showDir()throws Exception         {                    ta.setText("");                   String url = tf.getText();//http://192.168.1.254:8080/myweb/demo.html                                     int index1 = url.indexOf("//")+2;                    int index2 = url.indexOf("/",index1);                      String str = url.substring(index1,index2);                   String[] arr = str.split(":");                   String host = arr[0];                   int port = Integer.parseInt(arr[1]);                    String path = url.substring(index2);                   //ta.setText(str+"...."+path);                     Socket s = new Socket(host,port);                                     PrintWriter out = new PrintWriter(s.getOutputStream(),true);                    out.println("GET"+path+" HTTP/1.1");                   out.println("Accept:*/*");                   out.println("Accept-Language:zh-cn");                   out.println("Host:192.168.1.254:11000");                   out.println("Connection:closed");                    out.println();                   out.println();                    BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));                    String line = null;                    while((line=bufr.readLine())!=null)                   {                            ta.append(line+"\r\n");                   }                    s.close();          }          public static void main(String[] args)         {                   new MyIEByGUI();         }}


 

练习四:用GUI图形化界面仿制一个IE浏览器

 

import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;class MyIEByGUI2{         private Frame f;         private TextField tf;         private Button but;         private TextArea ta;                 private Dialog d;         private Label lab;         private Button okBut;           MyIEByGUI2()         {                   init();         }         public void init()         {                   f = new Frame("my window");                   f.setBounds(300,100,600,500);                   f.setLayout(newFlowLayout());                    tf = new TextField(60);                    but = new Button("转到");                    ta = new TextArea(25,70);                     d = new Dialog(f,"提示信息-self",true);                   d.setBounds(400,200,240,150);                   d.setLayout(newFlowLayout());                   lab = new Label();                   okBut = new Button("确定");                    d.add(lab);                   d.add(okBut);                      f.add(tf);                   f.add(but);                   f.add(ta);                     myEvent();                   f.setVisible(true);         }         private void  myEvent()         {                    okBut.addActionListener(new ActionListener()                   {                            public void actionPerformed(ActionEvent e)                            {                                     d.setVisible(false);                            }                   });                   d.addWindowListener(new WindowAdapter()                   {                            public void windowClosing(WindowEvent e)                            {                                     d.setVisible(false);                            }                   });                    tf.addKeyListener(newKeyAdapter()                   {                            public void keyPressed(KeyEvent e)                            {                                     try                                     {                                                        if(e.getKeyCode()==KeyEvent.VK_ENTER)                                               showDir();                                     }                                     catch(Exception ex)                                     {                                     }                                                       }                   });                     but.addActionListener(newActionListener()                   {                            public void actionPerformed(ActionEvent e)                            {                                     try                                     {                                               showDir();                                     }                                     catch(Exception ex)                                     {                                     }                                                                                                    }                   });                    f.addWindowListener(newWindowAdapter()                   {                            public void windowClosing(WindowEvent e)                            {                                     System.exit(0);                                    }                   });         }          private void showDir()throws Exception         {                    ta.setText("");                   String urlPath = tf.getText();//http://192.168.1.254:8080/myweb/demo.html                                     URL url = new URL(urlPath);                    URLConnection conn = url.openConnection();                                     InputStreamin = conn.getInputStream();                    byte[] buf = new byte[1024];                    int len = in.read(buf);                    ta.setText(newString(buf,0,len));          }          public static void main(String[] args)         {                   new MyIEByGUI2();         }}