java基础增强:网络编程tcpudp案例

zdl9857      2022-04-09     126

关键词:

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

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:UsersiDesktop/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中进行socket编程实现tcpudp协议总结

1,计算机进行通信编程的基础是有ip地址加端口号的主机唯一标示、有相应的一致的协议即tcp/ip。ip地址用来区分主机,端口号用来区分计算机上不同的应用软件。2,java提供的网络功能主要有四大类   1)InetAd... 查看详情

cc2530入门教程-增强版基础技能综合实训案例(基础版)-终端源码

【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-终端源码广东职业技术学院欧浩源 一、关于硬件电路    关于这个综合实训案例,具体需求详见《【CC2530入门教程-增强版】基础技能综合实训案例(... 查看详情

java使用tcpudp发送信息

Java使用TCPUDP发送信息网络通信的三要素TCP客户端服务端UDP发送端接收端网络通信的三要素IP地址端口号网络通信协议TCP客户端importjava.io.OutputStream;importjava.net.InetAddress;importjava.net.Socket;publicclassTcpClientpublicstaticvoidmain(String[]args)t 查看详情

cc2530入门教程-增强版基础技能综合实训案例(基础版)-上位机源码

【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-上位机源码广东职业技术学院 欧浩源一、需求分析    按照指定参数打开串口,与测控终端建立数据传输通道,并根据应用要求实现程序逻辑,具体... 查看详情

javaweb之java基础知识增强(代码片段)

文章目录1.JUnit测试1.1不用JUnit测试1.2使用JUnit测试2.反射2.1反射的概念2.2获取Class对象的方式2.3Class对象功能2.4案例:3.注解3.1概念相关3.2作用分类3.3JDK中预定义的一些注解3.3自定义注解3.4元注解:用于描述注解的注解3.5在... 查看详情

java使用tcpudp发送信息(代码片段)

Java使用TCPUDP发送信息网络通信的三要素TCP客户端服务端UDP发送端接收端网络通信的三要素IP地址端口号网络通信协议TCP客户端importjava.io.OutputStream;importjava.net.InetAddress;importjava.net.Socket;publicclassTcpClientpublicstaticvoidmain(String[]args)t 查看详情

cc2530入门教程-增强版基础技能综合实训案例(基础版)-题目需求

【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-题目需求广东职业技术学院 欧浩源一、引用  不管是简单的单片机应用,还是复杂的嵌入式系统,在我看来它们的本质结构是差不多的,都离不开“内核+外... 查看详情

java基础|java概述与基础语法案例

⭐本专栏旨在对JAVA的基础语法及知识点进行全面且详细的讲解,完成从0到1的java学习,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握JAVA编程,同时为后续的框架学习,进阶开发的代码能力打下坚实的基础。 查看详情

java学习网络编程全总结——tcpudp多线程io流socket简易在线咨询聊天室java爬虫(代码片段)

目录网络编程1.1、概述1.2、网络通信的要素1.3、IP1.4、端口(port)1.5、通信协议1.6、TCP文件上传Tomcat1.7、UDP发送消息构造方法摘要构造方法摘要咨询DatagramPacket.getData()与DatagramPacket.getLength()的误区trimstartsWith在线咨询:两个人都... 查看详情

javaweb之java基础知识增强(代码片段)

文章目录1.JUnit测试1.1不用JUnit测试1.2使用JUnit测试2.反射2.1反射的概念2.2获取Class对象的方式2.3Class对象功能2.4案例:3.注解3.1概念相关3.2作用分类3.3JDK中预定义的一些注解3.3自定义注解3.4元注解:用于描述注解的注解3.5在... 查看详情

java中进行socket编程实现tcpudp协议总结

1,计算机进行通信编程的基础是有ip地址加端口号的主机唯一标示、有相应的一致的协议即tcp/ip。ip地址用来区分主机,端口号用来区分计算机上不同的应用软件。2,java提供的网络功能主要有四大类   1)InetAd... 查看详情

java基础——udp实现dos聊天室案例(代码片段)

利用UDP网络编程UDP协议不严格区分发送端和接收端发送端//udp打包 byte[]b="固定".getBytes(); //DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport) //构造用于发送长度的分组的数据报包length指定主机上到指定的端口号。 Datagra... 查看详情

大数据入门基础七:流量统计案例--流量汇总求和!(项目三)

流量统计案例--流量汇总求和---自定义bean的序列化实现编写FlowSumMapper类编写FlowBean类 流量统计案例--mapper的实现及编程中减少垃圾的编程技巧编写FlowSumMapper类编写FlowBean类 流量统计案例--reducer的实现及编程中减少垃圾的... 查看详情

socket网络编程tcpudp演示样例

Socket网络编程: 1) OSI(了解):国际标准化组织ISO(International Orgnization for Standardization)指定了网络通信的模型:开放系统互联(OSI,Open System Interconnection),把网络通信工作分为七层:物理层(最底层)-数据链... 查看详情

java并发编程(02):线程核心机制,基础概念扩展

...些独立的任务执行,从而提升整体的效率。下面提供一个基础的演示案例。2、应用案例场景:假设有一个容器集合,需要拿出容器中的每个元素,进行加工处理,一般情况下直接遍历就好,如果数据偏大,可以根据线程数量对... 查看详情

python网络编程—(tcpudp区别)

tcp套接字和udp套接字编程区别1.流式套接字是以字节流方式传输数据,数据报套接字以数据报形式传输2.tcp套接字会有粘包,udp套接字有消息边界不会粘包3.tcp套接字保证消息的完整性,udp套接字则不能4.tcp套接字依赖listenaccept建... 查看详情

bingbingc(网络编程tcpudp)(代码片段)

上一篇目录标题字节序字节序转化TCP和UDPUDPsocket编程接口编码TCP接口检查连接是否成功代码单线程多进程服务端多线程高级IO参考字节序小端字节序:低位放在低地址大端字节序:低位放在高地址主机字节序:指的是机器本身的字节... 查看详情

bingbingc(网络编程tcpudp)(代码片段)

上一篇目录标题字节序字节序转化TCP和UDPUDPsocket编程接口编码TCP接口检查连接是否成功代码单线程多进程服务端多线程高级IO参考字节序小端字节序:低位放在低地址大端字节序:低位放在高地址主机字节序:指的是机器本身的字节... 查看详情