黑马程序员---网络编程(TCP、MyIE、URL)

来源:互联网 发布:经纬度查询定位软件 编辑:程序博客网 时间:2024/06/05 05:47

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


TCP上传图片

/*需求:上传图片。*//*客户端。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(new String(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();        InputStream in = s.getInputStream();        byte[] bufIn = new byte[1024];        int num = in.read(bufIn);        System.out.println(new String(bufIn,0,num));        fis.close();        s.close();    }}/*服务端这个服务端有个局限性。当A客户端连接上以后。被服务端获取到。服务端执行具体流程。这时B客户端连接,只有等待。因为服务端还没有处理完A客户端的请求,还有循环回来执行下次accept方法。所以暂时获取不到B客户端对象。那么为了可以让多个客户端同时并发访问服务端。那么服务端最好就是将每个客户端封装到一个单独的线程中,这样,就可以同时处理多个客户端请求。如何定义线程呢?只要明确了每一个客户端要在服务端执行的代码即可。将该代码存入run方法中。*/class PicThread implements Runnable{    private Socket s;    PicThread(Socket s)    {        this.s = s;    }    public void run()    {        int count = 1;        String ip  = s.getInetAddress().getHostAddress();        try        {            System.out.println(ip+"....connected");            InputStream in = s.getInputStream();            File dir =  new File("d:\\pic");            File file = new File(dir,ip+"("+(count)+")"+".jpg");            while(file.exists())                file = new File(dir,ip+"("+(count++)+")"+".jpg");            FileOutputStream fos = new FileOutputStream(file);            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();        }        catch (Exception e)        {            throw new 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();    }}

自定义服务端

/*演示客户端和服务端。1,客户端:浏览器 (telnet)服务端:自定义。2,客户端:浏览器。服务端:Tomcat服务器。3,客户端:自定义。(图形界面)服务端:Tomcat服务器。*/import java.net.*;import java.io.*;class ServerDemo {    public static void main(String[] args) throws Exception    {        ServerSocket ss = new ServerSocket(11000);        Socket s = ss.accept();        System.out.println(s.getInetAddress().getHostAddress());        InputStream in = s.getInputStream();        byte[] buf = new byte[1024];        int len = in.read(buf);        System.out.println(new String(buf,0,len));        PrintWriter out = new PrintWriter(s.getOutputStream(),true);        out.println("<font color='red' size='7'>客户端你好</font>");        s.close();        ss.close();    }}

自定义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(new FlowLayout());        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(new FlowLayout());        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(new KeyAdapter()        {            public void keyPressed(KeyEvent e)            {                try                {                        if(e.getKeyCode()==KeyEvent.VK_ENTER)                    showDir();                }                catch (Exception ex)                {                }            }        });        but.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                try                {                    showDir();                }                catch (Exception ex)                {                }            }        });        f.addWindowListener(new WindowAdapter()        {            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();    }}

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(new FlowLayout());        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(new FlowLayout());        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(new KeyAdapter()        {            public void keyPressed(KeyEvent e)            {                try                {                        if(e.getKeyCode()==KeyEvent.VK_ENTER)                    showDir();                }                catch (Exception ex)                {                }            }        });        but.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                try                {                    showDir();                }                catch (Exception ex)                {                }            }        });        f.addWindowListener(new WindowAdapter()        {            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();        InputStream in = conn.getInputStream();        byte[] buf = new byte[1024];        int len = in.read(buf);        ta.setText(new String(buf,0,len));    }    public static void main(String[] args)     {        new MyIEByGUI2();    }}

URL

import java.net.*;class URLDemo {    public static void main(String[] args) throws MalformedURLException    {        URL url = new URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30");        System.out.println("getProtocol() :"+url.getProtocol());        System.out.println("getHost() :"+url.getHost());        System.out.println("getPort() :"+url.getPort());        System.out.println("getPath() :"+url.getPath());        System.out.println("getFile() :"+url.getFile());        System.out.println("getQuery() :"+url.getQuery());        /*int port = getPort();        if(port==-1)            port = 80;        getPort()==-1        */    }}/* String getFile()           获取此 URL 的文件名。  String getHost()           获取此 URL 的主机名(如果适用)。  String getPath()           获取此 URL 的路径部分。  int getPort()           获取此 URL 的端口号。  String getProtocol()           获取此 URL 的协议名称。  String getQuery()           获取此 URL 的查询部 */

URLConnection

import java.net.*;import java.io.*;class  URLConnectionDemo{    public static void main(String[] args) throws Exception    {        URL url = new URL("http://192.168.1.254:8080/myweb/demo.html");        URLConnection conn = url.openConnection();        System.out.println(conn);        InputStream in = conn.getInputStream();        byte[] buf = new byte[1024];        int len = in.read(buf);        System.out.println(new String(buf,0,len));    }}
0 0
原创粉丝点击