码迷,mamicode.com
首页 > 编程语言 > 详细

java基础增强:网络编程、Tcp、Udp案例

时间:2018-08-24 02:12:49      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:基础   adl   java.net   system   编写   code   err   stream   .net   

一入编程深似海,从此妹子是路人。

1、Udp的客户端,服务端-----DatagramSocket

通过Udp协议编写一个群聊室,具体实现代码如下:

package day.by.day.udp.charroom;
//客户端代码
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

public class Client implements Runnable{

    @Override
    public void run() {
      //点名DatagramSocket快递员
        try {
            DatagramSocket ds = new DatagramSocket();
            //书写包裹信息,快递单寄件人信息
            Scanner sc = new Scanner(System.in);
            String str;
            while( (str = sc.nextLine())!=null) {
              //包装包裹,和收件地址,快递号
                DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length,
                        InetAddress.getByName("127.0.0.1"),8888);  
                //给快递员送走
                ds.send(dp);
                if( "over".equals(str)) { 
                    break;
                }
            }
            ds.close();
            sc.close();
            
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    
}
package day.by.day.udp.charroom;
//服务端代码
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class sever implements Runnable{

    @Override
    public void run() {
        try {
            DatagramSocket ds = new DatagramSocket(8888);
            DatagramPacket dp = new DatagramPacket(new byte[64*1024], 64*1024);
            while( true) { 
                ds.receive(dp);
                byte[] bs = dp.getData();
                int len = dp.getLength();
                InetAddress ip = dp.getAddress();
                System.out.println(ip.getHostAddress()+":"+new String(bs,0,len));
            }
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    

}
package day.by.day.udp.charroom;
//执行程序
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Run {

    public static void main(String[] args) throws Exception {
        //用线程池的方法
        ExecutorService pool = Executors.newCachedThreadPool();
        pool.execute(new Client());
        Thread.sleep(10);
        pool.execute(new sever());
    }

}

2、Tcp借助字节流传输数据,客户端---Socker,  服务端----ServerSocket

通过Tcp协议实现多级文件夹的拷贝,具体实现代码如下:

package day.by.day.tcp.copyflioder;
//客户端代码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class CopyFlioderTcpClient {

    public static void main(String[] args) {
        //获取文件
        File folder = new File("d:/pic",".jpg");
        String[] list = folder.list();
        for (String file : list) {
            
            try {
                Socket s = new Socket("127.0.0.1",8888);
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
                BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
                //开始读取文件信息
                byte[] brr = new byte[1024];
                int len;
                while((len = bis.read(brr))!=-1) { 
                    bos.write(brr,0,len);
                    bos.flush();
                }
                s.shutdownOutput();
                
                BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
                System.out.println(br.readLine());
                bis.close();
                s.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        
    }

}
package day.by.day.tcp.copyflioder;
//服务端代码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

import day.by.day.shangchuantupian.test.SeverSocker;

public class CopyFiloderSever {

    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(8888);
            while( true) { 
                Socket s = ss.accept();
                File file = new File("d:/", System.currentTimeMillis()+".jpg");
                BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
                byte[] brr = new byte[1024];
                int len;
                while( ( len = bis.read(brr))!=-1) { 
                    bos.write(brr,0,len);
                    bos.flush();
                }
                
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                bw.write("chenggong");
                bw.newLine();
                bw.flush();
                bos.close();
                s.close();
                ss.close();
                
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

3、Tcp借助字节流传输数据,客户端---Socker,  服务端----ServerSocket

通过Tcp协议实现图片的上传,具体实现代码如下:

package day.by.day.shangchuantupian.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
//客户端代码
public class SockerClient {

    public static void main(String[] args) {
        //创建socket对象获取IP地址和端口号
      try {
        Socket s = new Socket("127.0.0.1",8888);
        //创建缓冲字节输入流,用来获取本地图片的字节信息
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Usersi\\Desktop/222.jpg"));
        //在IO流池中获取输出字节流
        BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
        //开始读取图片信息
        //创建缓冲数组
       byte[] brr = new byte[1024];
       int len;
       while( ( len = bis.read(brr))!=-1) { 
           bos.write(brr);
           bos.flush();
       }
       s.shutdownOutput();
       
       //就接受服务端返回的信息
       //创建缓冲输入字符流
       BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
       System.out.println( br.readLine());
       s.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }

}
package day.by.day.shangchuantupian.test;
//服务端代码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class SeverSocker implements Runnable{
    private Socket s;
    
    public SeverSocker(Socket s) {
        this.s = s;
    }

    @Override
    public void run() {
        //创建缓冲字节输入流
        try {
            BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
            //创建缓冲字节输出流,用于生命复制图片的地址
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:/"+System.currentTimeMillis()+".jpg"));
            //读取流中的图片信息
            //定义缓冲数组
            byte[] brr = new byte[1024];
            int len;
            while( ( len = bis.read(brr))!=-1) { 
                bos.write(brr,0,len);
                bos.flush();
            }
            
            //向客户端返回信息
            //定义缓冲字符输出流
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            bw.write("上传成功");
            bw.newLine();
            bw.flush();
            s.close();
        } catch (Exception e) {
            //处理异常
            System.out.println("上传失败");
            if( null != s) { 
                try {
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                    bw.write("上传成功");
                    bw.newLine();
                    bw.flush();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            } 
            e.printStackTrace();
        }finally {
            if( null != s) { 
                try {
                    s.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        
    }
    
   

}
package day.by.day.shangchuantupian.test;
//执行代码
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Test {

    public static void main(String[] args) {
        //创建seversocket对象链接端口号
        try {
            ServerSocket ss = new ServerSocket(8888);
            while( true) { 
                //接收客户端信息
                Socket s = ss.accept();
                //调用多线程
                new Thread(new SeverSocker(s)).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

}

结束语:经得住诱惑,耐得住寂寞。

java基础增强:网络编程、Tcp、Udp案例

标签:基础   adl   java.net   system   编写   code   err   stream   .net   

原文地址:https://www.cnblogs.com/zdl9857/p/9527262.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!