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


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

 
/*
需求:上传图片。
客户端。
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();
         }
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值