zoukankan      html  css  js  c++  java
  • JAVA基础学习网络编程<二>

    1.客户端上传一个文件通过TCP传送给服务端,服务端发送一个反馈信息给客户端确认接收

       1: import java.io.BufferedReader;
       2: import java.io.DataInputStream;
       3: import java.io.DataOutputStream;
       4: import java.io.FileReader;
       5: import java.io.FileWriter;
       6: import java.io.InputStreamReader;
       7: import java.io.PrintWriter;
       8: import java.net.ServerSocket;
       9: import java.net.Socket;
      10:  
      11: //写时间戳很麻烦,定义标记的简便方式shutdownInput、shutdownOutput,
      12: //相当于为流加入结束标记。
      13: public class TextClient {
      14:  
      15: public static void main(String[] args)throws Exception
      16: {
      17:     //建立指定主机和端口的socket服务
      18:     Socket s =new Socket("192.168.1.154",10056);
      19:     //建立文件读取流对象关联要读取的文件,并将流存入缓冲区
      20:     BufferedReader bufr=
      21:         new BufferedReader(new FileReader("1.txt"));
      22:     //定义打印流对象,把流内容打印到socket服务的字节输出流中
      23:     PrintWriter out =new PrintWriter(s.getOutputStream(),true);    
      24:     /*
      25:      定义一个时间戳作为结束标记
      26:     DataOutputStream dos=new DataOutputStream(s.getOutputStream());
      27:     long time=System.currentTimeMillis();
      28:     dos.writeLong(time);
      29:     */
      30:     String line=null;
      31:     while((line=bufr.readLine())!=null)
      32:     {
      33:         //打印流对象将文件的字节内容不断的输出到socket服务的字节输出流中
      34:         out.println(line);
      35:     }
      36:     
      37:     //dos.writeLong(time);//写一个时间戳
      38:     //客户端和服务端的交互,也要获得服务端的反馈信息
      39:     //getInputStream():返回此套接字的输入流。
      40:     BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
      41:     
      42:     String str=bufIn.readLine();
      43:     //看一下服务端都说了什么
      44:     System.out.println(str);
      45:     bufr.close();
      46:     s.close();
      47:  
      48: }
      49: }
      50: //服务端代码和客户端是对应的,相反的一个过程
      51: class TextServer
      52: {
      53:     public static void main(String[] args) throws Exception
      54:     {
      55:         /*建立服务端ServerSocket监听一个端口
      56:          * 此类实现服务器套接字。
      57:          * 服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
      58:          **/             
      59:         ServerSocket ss =new ServerSocket(10056);
      60:         //accept(), 侦听并接受到此套接字的连接。
      61:         Socket s=ss.accept();
      62:         //DataInputStream dis=new DataInputStream(s.getInputStream());
      63:         //long l=dis.readLong();//读时间戳        
      64:         BufferedReader bufIn=
      65:             new BufferedReader(new InputStreamReader(s.getInputStream()));
      66:         
      67:         PrintWriter out =new PrintWriter(new FileWriter("server.txt"),true);
      68:         String line=null;
      69:         while((line=bufIn.readLine())!=null)
      70:         {
      71:             if("over".equals(line));//读取到结束标记
      72:             out.println(line);
      73:         }
      74:         PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
      75:         pw.println("上传成功");
      76:         out.close();
      77:         s.close();
      78:         ss.close();
      79:     }
      80: }

    2.

    /**
    * 利用多线程解决多客户并发连接服务端的问题
    * 复制图片过程:
    * 客户端:服务端点、读取一个图片文件、通过
    * socket输出流将数据发给服务端
    * 读取服务端的反馈信息
    * 关闭
    */

       1: import java.io.File;
       2: import java.io.FileInputStream;
       3: import java.io.FileOutputStream;
       4: import java.io.InputStream;
       5: import java.io.OutputStream;
       6: import java.net.ServerSocket;
       7: import java.net.Socket;
       8:  
       9: class PicThread implements Runnable
      10: {
      11:     private Socket s;
      12:     PicThread(Socket s)
      13:     {
      14:         this.s=s;
      15:     }
      16:     public void run()
      17:     {
      18:         int count=1;
      19:         String ip=s.getInetAddress().getHostAddress();
      20:         try {
      21:             InputStream in=s.getInputStream();
      22:             
      23:             //防止多客户上传来的图片发生覆盖            
      24:             File file=new File(ip+"("+(count++)+")"+".pmp");
      25:             while(file.exists())
      26:                 file=new File(ip+"("+(count++)+")"+".pmp");
      27:             FileOutputStream fos=new FileOutputStream(file);
      28:             byte[]  buf=new byte[1024];
      29:             int len=0;
      30:             while((len=in.read(buf))!=-1)
      31:             {
      32:                 fos.write(buf,0,len);
      33:             }
      34:             OutputStream out=s.getOutputStream();
      35:             out.write("上传成功".getBytes());
      36:             fos.close();
      37:             s.close();
      38:         
      39:         } catch (Exception e) {
      40:             throw new RuntimeException("失败了");
      41:         }
      42:     }
      43: }
      44: public class PicClient
      45: {
      46:     public static void main(String[] args)throws Exception
      47:     {
      48:         if(args.length!=1)
      49:         {
      50:             System.out.println("请选择一个图片");
      51:             return;
      52:             
      53:         }
      54:         File file=new File(args[0]);
      55:         if(!(file.exists()&&file.isFile()))
      56:         {
      57:             System.out.println("图片有问题");
      58:             return;
      59:         }
      60:         if(!(file.getName().endsWith(".jpg")))
      61:         {
      62:             System.out.println("图片有问题");
      63:             return;
      64:         }
      65:         if(file.length()>1024*1024*5)
      66:         {
      67:             System.out.println("图片有问题");
      68:             return;
      69:         }
      70:         Socket s=new Socket("192.168.1.254",10006);
      71:         FileInputStream fis =new FileInputStream(file);
      72:         OutputStream out =s.getOutputStream();
      73:         byte[]  buf=new byte[1024];
      74:         int len=0;
      75:         while((len=fis.read(buf))!=-1)
      76:         {
      77:             out.write(buf,0,len);
      78:         }
      79:         //告诉服务端数据已写完
      80:         s.shutdownOutput();
      81:         InputStream in=s.getInputStream();
      82:         byte[] bufIn=new byte[1024];
      83:         int num=in.read(bufIn);
      84:         System.out.println(new String(bufIn,0,num));
      85:         fis.close();
      86:         s.close();
      87:     }        
      88:  
      89: }
      90: /*服务器的读取图片代码要被多个客户端执行,所以要封装到线程中,否则一个
      91: 客户连进来,另一个客户只能等待,因为没有处理完上一个客户时,下一个客户无法
      92: 获取到accept方法
      93: */
      94: class PicServer//阻塞式方法,不会一直读
      95: {
      96:     public static void main(String[] args)throws Exception
      97:     {
      98:         ServerSocket ss=new ServerSocket(10006);
      99:         
     100:         while(true)
     101:         {
     102:             Socket s=ss.accept();//拿到accept很重要
     103:             //进来一个客户就去拿自己的那份服务端线程,并开启线程 。
     104:             new Thread(new PicThread(s)).start();
     105:         }
     106:         
     107:         
     108:     }
     109: }

    3.服务端自定义,客户端浏览器

       1: import java.io.PrintWriter;
       2: import java.net.ServerSocket;
       3: import java.net.Socket;
       4: public class ServerDamo 
       5: {
       6:     public static void main(String[] args)throws Exception 
       7:     {
       8:         ServerSocket ss=new ServerSocket(11001);
       9:         Socket s=ss.accept();
      10:         System.out.println(s.getInetAddress().getHostAddress());
      11:         
      12:         PrintWriter out=new PrintWriter(s.getOutputStream(),true);
      13:         out.println("呼叫客户端");
      14:         s.close();
      15:         ss.close();
      16:     }

    4.//客户端自定义,服务端tomcat服务器

       1: import java.io.BufferedReader;
       2: import java.io.InputStreamReader;
       3: import java.io.PrintWriter;
       4: import java.net.Socket;
       5:  
       6: public class ClientDamo 
       7: {
       8:  
       9:     public static void main(String[] args) throws Exception
      10:     {
      11:         //tomcate端口是8080
      12:         Socket s=new Socket("192.168.1.254",8080);
      13:         PrintWriter out=new PrintWriter(s.getOutputStream(),true);
      14:         out.println("");
      15:         out.println("");
      16:         out.println("");//往tomcat发特定格式的请求消息
      17:         BufferedReader bufr=new BufferedReader(new InputStreamReader(s.getInputStream()));
      18:         String line=null;
      19:         //读取tomcat发回来的应答消息
      20:         while((line=bufr.readLine())!=null)
      21:         {
      22:             System.out.println(line);
      23:         }
      24:         s.close();
      25:     }
      26:  
      27: }

    5.URLConnection:3G里常用的类,它作用于应用层,拆包自己的信息并解读

    /*URL有很多方法,有几个很重要的获取方法如:表单提交
    * 获取参数信息的时候
    */

       1: import java.io.InputStream;
       2: import java.net.URL;
       3: import java.net.URLConnection;
       4: public class URLConnectionDemo
       5: {
       6:     public static void main(String[] args) throws Exception
       7:     {
       8:         URL url=new URL("http://127.0.0.1/myweb");
       9:         //返回一个urlconection连接对象,表示它到URL所引起的 远程对象的连接
      10:         //已连接上网址对应的主机,socket都不用写了,而且提供了很多方法
      11:         URLConnection conn=url.openConnection();//打开连接了
      12:         
      13:         InputStream in =conn.getInputStream();
      14:         byte[]  buf=new byte[1024];
      15:         int len =in.read(buf);
      16:         System.out.println(new String(buf,0,len));
      17:     }
      18:  
      19: }
       1: import java.net.URL;
       2:  
       3:  
       4: public class URLdemo 
       5: {
       6:     public static void main(String[] args)throws Exception
       7:     {
       8:         URL url=new URL("http://127.0.0.1/myweb/?name=haha;");
       9:         System.out.println(url.getQuery());//返回name=haha
      10:     }
      11:  
      12: }
  • 相关阅读:
    Matlab中imagesc用法
    codevs 3160 最长公共子串(SAM)
    spoj 7258 SUBLEX(SAM,名次)
    spoj 1812 LCS2(SAM+DP)
    spoj 8222 Substrings(后缀自动机+DP)
    tyvj P1519 博彩游戏(AC自动机+DP滚动数组)
    bzoj 1030 [JSOI2007]文本生成器(AC自动机+DP)
    vijos P1459 车展(Treap,中位数)
    bzoj 3196 Tyvj 1730 二逼平衡树(线段树套名次树)
    bzoj 1483 [HNOI2009]梦幻布丁(链表+启发式合并)
  • 原文地址:https://www.cnblogs.com/94007boy/p/2690122.html
Copyright © 2011-2022 走看看