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

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

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();
        }

    }

}

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

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

时间: 2024-11-07 17:05:04

java基础增强:网络编程、Tcp、Udp案例的相关文章

java基础篇---网络编程(TCP程序设计)

TCP程序设计 在Java中使用Socket(即套接字)完成TCP程序的开发,使用此类可以方便的建立可靠地,双向的,持续的,点对点的通讯连接. 在Socket的程序开发中,服务器端使用serverSocket等待客户端的连接,对于Java的网络程序来讲,每一个客户端都使用一个socket对象表示. 在Java的网络程序中,客户端只要符合连接的通讯协议,那么服务端都可以进行接收. ServerSocket类主要用于服务器端程序的开发上,用于接收客户端的连接请求. Socket在服务器端每次运行时都

java基础:网络编程TCP,URL

获取域名的两种方法: package com.lanqiao.java.test; import java.net.InetAddress;import java.net.UnknownHostException; public class testInetAddress { public static void main(String[] args) throws Exception { InetAddress inet=InetAddress.getByName("www.atguigu.c

Java基础之网络编程

Java网络编程 课前思考1. 什么是TCP/IP协议?2. TCP/IP有哪两种传输协议,各有什么特点?3. 什么是URL?4. URL和IP地址有什么样的关系?5. 什么叫套接字(Socket)?6. 套接字(Socket)和TCP/IP协议的关系?7. URL和套接字(Socket)的关系?8.1 网络编程基本概念,TCP/IP协议简介 8.1.1 网络基础知识      网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络

Java基础知识网络编程

概述 java除了可以完成本地的操作,也可以完成网络通讯.比如想从自己的电脑上发送一个信息到张三的电脑上,张三收到信息之后再给我返回一个信息,利用java实现两个机器之间的数据的通讯.数据通讯的原理就是数据传输的过程,与本机的区别就是涉及到网络. 网络通讯要具备的要素和模型: 比如和张三通讯 1.首先要找到张三的主机,张三主机的标识就是IP地址(也就是主机的名字,IP地址由4个字节表示,可以表示很多主机,避免冲突). 2.和张三通讯的方式有很多种,可以是QQ,也可以是微信.两个机器都要装有通讯的

Java基础7——网络编程

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程就是用来实现网络互联的不同计算机上运行的程序间可以进行数据交换 网络模型研究计算机网络之间以何种规则进行通信 网络模型一般是指OSI参考模型 TCP/IP参考模型 网络编程三要素 IP地址——网络中每台计算机的唯一标识 端口——计算机上每个应用程序的唯一标识 协议——通信之间的规则 计算机只能识别二进制的

黑马程序员-Java基础之网络编程

网络编程 实现计算机互联的三要素: 1.IP地址 本机回路IP:127.0.0.1 2.端口号(逻辑端口):用于标识应用程序. 端口号0~65535之间的整数:0~1024之间大部分已被用于一些知名的网络服务和应用,所以现在开发的网络应用程序端口号一般是1024以后的整数. 3.通信协议 TCP:三次握手机制,面向连接,稍慢.可靠 UDP:无连接,每个数据报大小限制在64K内.传输快.不可靠. 网络参考模型 TCP/IP参考模型 应用层:javaWeb开发 传输层:TCP/UDP 网际层:IP

java基础篇---网络编程

一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一定可以接受的到 在Java中的所有网络程序的开发类都在java.net包中存在 IP地址简介 IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络

java基础教程-网络编程(七)

七.网络编程 7.1.IP协议 最重要的贡献是IP地址 7.2.TCP和UDP协议 TCP(快)可靠传输,发送时必须建立连接(三次握手协议 ) UDP(慢)不可靠传输,发送时无须建立连接 7.3.TCP 的TCP Server和TCP Client 注意,要首先启动Server,再启动Client 端口号是应用的入口,有两个字节,所以每个服务器最多能运行65536个应用程序,而TCP的端口和UDP的端口不一样,定义端口时,尽量定义1024以上的. 特别典型的端口号,http  80: //TCP

Java基础:网络编程总结

Java语言是在网络环境下诞生的,它是第一个完全融入网络的语言,虽然不能说它是对支持网络编程做得最好的语言,但是必须说是一种对于网络编程提供良好支持的语言.这归功于java的自身优势: 1.java语言与生俱来就是与平台无关的,有良好的跨平台性,所以运行在不同在平台上的java程序能够方便地进行网络通信. 2.java语言具有良好的安全机制,可以对程序进行权限检查,这对网络程序是至关重要的. 3.JDK中有丰富的网络类库,大大简化了网路变成的开发过程. 一.概念

java基础篇---网络编程(UDP程序设计)

UDP程序设计 在TCP的索引操作都必须建立可靠地连接,这样一来肯定会浪费大量的系统性能,为了减少这种开销,在网络中又提供了另外一种传输协议---UDP,不可靠的连接,这种协议在各个聊天工具中被广泛的应用. 咋UDP开发中使用DatagramPacket包装一条要发送的信息,之后使用DatagramSocket用于完成信息的发送操作. 例如:现在使用聊天工具进行聊天的功能,那么A的发送的信息B不一定可以接受的到,因为使用的是UDP的协议. UDP中主要是使用数据报协议发送的. DatagramP