黑马程序员-Java-网络编程-day24

来源:互联网 发布:java 多次使用scanner 编辑:程序博客网 时间:2024/06/04 17:49

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

1、网络编程(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("127.0.0.1",10006);               FileInputStream fis = new FileInputStream("1.png");               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(10006);               Socket s = ss.accept();               InputStream in = s.getInputStream();               FileOutputStream fos = new FileOutputStream("server.png");               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();       }}


2、网络编程(TCP-客户端并发上传图片)

import java.io.*;import java.net.*;class PicClient{       public static void main(String[] args) throws Exception       {              if(args.length!=1)              {                     System.out.println("请选择一个png格式的图片文件");                     return;              }              File file = new File(args[0]);              if(!(file.exists() &&file.isFile()))              {                     System.out.println("该文件有问题,要么不存在,要么不是文件");                     return;              }              if(!file.getName().endsWith(".png"))              {                     System.out.println("图片格式错误,请重新选择");                     return;              }               if(file.length()>1024*1024*5)              {                     System.out.println("文件过大,请重新选择");                     return;              }              Socket s = new Socket("127.0.0.1",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(newString(bufIn,0,num));               fis.close();              s.close();         }}

 

/*

服务端

这个服务端有个局限性,当A客户端连接上以后,被服务端获取到,服务端执行具体流程。

这时B客户端连接,只有等待;因为服务端还没有处理完A客户端的请求,还要

循环回来执行下次accept方法,所以暂时获取不到B客户端对象。

那么为了可以让多个客户端同时冰法访问服务端,那么服务端最好就是讲每个客户端封装到一个单独的线程中,这样就可以同时处理多个客户端请求。

*/

class PicThread implements Runnable{       private Socket s;       PicThread(Socket s)       {              this.s = s;       }       public void run()       {              String ip = s.getInetAddress().getHostAddress();              try              {                     intcount =1;                     System.out.println(ip+"....connected");                      InputStream in = s.getInputStream();                      Filefile = new File(ip+".png");                      while(file.exists())//多次判断                     {                            file = new File(ip+"("+(count++)+")"+".png");                     }                      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("上传失败");              }       }}class PicServer{       public static void main(String[] args)throws Exception       {              ServerSocket ss = newServerSocket(10007);              while(true)              {                     Sockets = ss.accept();                                         new Thread(new PicThread(s)).start();              }                               }}


3、网络编程(TCP-客户端并发登录)

/*

客户端通过键盘录入用户名,服务端对这个用户名进行校验。

如果该用户存在,在服务端显示XXX,已登录。

并在客户端显示XXX,欢迎光临。

如果该用户不存在,在服务端显示XXX,尝试登陆,

并在客户端显示XXX,该用户不存在。最多登陆三次。

能不能读到结尾,就看流所读取的文件

*/

import java.io.*;import java.net.*;class LoginClient{       public static void main(String[] args) throws Exception       {              Socket s = new Socket("127.0.0.1",10008);               BufferedReader bufr =                     new BufferedReader(new InputStreamReader(System.in));               PrintWriter out = new PrintWriter(s.getOutputStream(),true);               BufferedReader bufIn =                     new BufferedReader(new InputStreamReader(s.getInputStream()));               for(int x=0; x<3; x++)              {                     String line = bufr.readLine();                     if(line==null)                            break;                     out.println(line);                      String info = bufIn.readLine();                     System.out.println("info:"+info);                     if(info.contains("欢迎"))                            break;              }              bufr.close();              s.close();       }} class UserThread implements Runnable{       private Socket s;       UserThread(Socket s)       {              this.s = s;       }       publi cvoid run()       {              String ip =s.getInetAddress().getHostAddress();              System.out.println(ip+"......connected");              try              {                     for(intx=0; x<3; x++)                     {                            BufferedReader bufIn =                                   new BufferedReader(new InputStreamReader(s.getInputStream()));                             String name = bufIn.readLine();                            if(name==null)//这里判断name是否为空很重要,否则就会抛异常                                   break;                             BufferedReader bufr =                                   new BufferedReader(new FileReader("user.txt"));                             PrintWriter out = new PrintWriter(s.getOutputStream(),true);                             String line = null;                            boolean flag = false;                            while((line=bufr.readLine())!=null)                            {                                   if(line.equals(name))                                   {                                          flag = true;                                          break;                                   }                            }                            if(flag)                            {                                   System.out.println(name+",已登录");                                   out.println(name+",欢迎光临");                                   break;                            }                            else                            {                                   System.out.println(name+",尝试登陆");                                   out.println(name+",用户名不存在");                            }                     }                     s.close();              }              catch (Exception e)              {                     throw new RuntimeException(ip+"校验失败");              }       }}class LoginServer{       public static void main(String[] args) throws Exception       {              ServerSocket ss = new ServerSocket(10008);              while(true)              {                     Sockets = ss.accept();                     new Thread(new UserThread(s)).start();              }       }}


4、网络编程(浏览器客户端-自定义服务器)

演示客户端和服务端

1.客户端:浏览器

服务端:自定义

telnet:Windows远程登陆命令

2.

客户端:浏览器

服务端:Tomcat服务器

3.

客户端:自定义

服务端:Tomcat服务器

import java.io.*;import java.net.*;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());               PrintWriter out = new PrintWriter(s.getOutputStream());               out.println("<font color='red'size='8'>客户端,你好</font>");               s.close();               ss.close();       }}

5、网络编程(浏览器客户端-Tomcat服务端)

import java.net.*;class URLDemo{       public static void main(String[] args) throws MalformedURLException       {              URL url = newURL("http://127.0.0.1:8080/myweb/demo.html?name=haha&age=30");              System.out.println("getProtocol:"+url.getProtocol());              System.out.println("getHost:"+url.getHost());              System.out.println("getFile:"+url.getFile());              System.out.println("getPath:"+url.getPath());              System.out.println("getPort:"+url.getPort());              System.out.println("getQuery:"+url.getQuery());               /*              int port = getPort();              if(port==-1)                     prot= 80;               getPort() = -1;              */       }}


6、自定义图形界面浏览器-Tomcat服务端

import java.io.*;import java.net.*;import java.awt.*;import java.awt.event.*;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.128.1: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.128.1: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");                     //System.out.println(line);              }              s.close();       }       public static void main(String[] args)       {              new MyIEByGUI();       }}

7、网络编程(URL-URLConnection)

 String getFile()    获取此 URL 的文件名。

 String getHost()   获取此 URL 的主机名(如果适用)。

 String getPath()   获取此 URL 的路径部分。

 intgetPort()               获取此 URL 的端口号。

 String getProtocol()    获取此 URL 的协议名称。

 String getQuery()              获取此 URL 的查询部分。

URLConnection openContection()  返回一个URLConnection对象,它表示到URL所引用的远程对象的连接

public ServerSocket(int port,int backlog)     port:指定的端口;backlog:队列的最大长度,也就是支持最多用户

import java.io.*;import java.net.*;class URLConnectionDemo{       public static void main(String[] args) throws Exception       {              URL url = new URL("http://127.0.0.1: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));       }}

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
原创粉丝点击