zoukankan      html  css  js  c++  java
  • Java网络编程实例---------------------------------TCP和UDP发送数据统计

    TCPClient 用来发送TCP数据,服务器返回发送的数据

    package org.bq.tcp;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.net.Socket;
    
    /**
     *@author 白强
     *@version 1.0
     */
    public class TCPClient {
        
        public TCPClient(String serverName) throws Exception {
            byte seq=0;
            byte[] buffer = new byte[1];
            Socket socket = new Socket();
            socket.setSoTimeout(1000);
            long begin=0, end=0, time=0;
            int count=0,times=0;
            //发送1000次
            while(count < 1000) {
                seq++;
                buffer[0] = seq;
                System.out.println("seq is :"+seq);
                socket = new Socket(serverName,8888);
                BufferedInputStream istream = new BufferedInputStream(socket.getInputStream());
                BufferedOutputStream ostream = new BufferedOutputStream(socket.getOutputStream());
                //记录发送前的时间
                begin=System.currentTimeMillis();
                ostream.write(buffer, 0, buffer.length);
                ostream.flush();
                int num_bytes = istream.read(buffer);
                System.out.println(num_bytes);
                socket.close();
                //记录发送完你的时间
                end=System.currentTimeMillis();
                //累计时间
                time+=(end-begin)*1.0;
                //累计发送次数
                times++;
                //发送成功,下次循环
                if (buffer[0] == seq) {++count;} 
            }
            System.out.println("发送次数: "+times);
            System.out.println("平均时间: "+time*1.0/1000);
        }
    
        public static void main(String[] args) throws Exception {
            new TCPClient("localhost");
        }
    }

    package org.bq.tcp;
    
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * @author 白强
     * @version 1.0
     *
     */
    public class TCPServer {
        public static void main(String args[])throws Exception{
            System.out.println("TCP Server starting ... ");
            byte[] buffer = new byte[1];
            Socket socket=new Socket();
            ServerSocket serverSocket = new ServerSocket(8888);
            //无限循环
            while(true) {
                try{
                    //接受请求
                    socket = serverSocket.accept();
                    //输入输出流
                    BufferedInputStream istream = new BufferedInputStream(socket.getInputStream());
                    BufferedOutputStream ostream = new BufferedOutputStream(socket.getOutputStream());
                    //读取数据
                    int num_bytes = istream.read(buffer);
                    System.out.println(num_bytes);
                    //发送数据
                    ostream.write(buffer, 0, num_bytes);
                    ostream.flush(); 
                    socket.close();
                    }catch(Exception e){
                        System.out.println(e.getMessage());
                    }
            }
        }
    }

    UDPClient发送UDP数据,服务器返回发送的数据

    package org.bq.udp;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketTimeoutException;
    
    /**
     *@author 白强
     *@version 1.0
     */
    public class DatagramClient {
    
        public DatagramClient(String serverName) throws IOException {
    
            byte[] sendbuffer = new byte[1];
            byte[] recvbuffer = new byte[1];
            long begin = 0, end = 0, time = 0;
            int times = 0, dup = 0;
    
            DatagramSocket clientSocket = new DatagramSocket(8001);
            InetAddress IPAddress = InetAddress.getByName(serverName);
            System.out.println(IPAddress);
            clientSocket.setSoTimeout(20);
    
            for (int i = 0; i < 128; i++) {
                try {
                    //记录起始时间
                    begin = System.currentTimeMillis();
                    sendbuffer[0] = (byte) i;
                    //发送数据
                    DatagramPacket sendPacket = new DatagramPacket(sendbuffer,
                            sendbuffer.length, IPAddress, 8000);
                    clientSocket.send(sendPacket);
                    //接收数据
                    DatagramPacket recvPacket = new DatagramPacket(recvbuffer,
                            recvbuffer.length);
                    clientSocket.receive(recvPacket);
                    //记录结束时间
                    end = System.currentTimeMillis();
                    //累计时间
                    time += (end - begin) * 1.0;
                    //返回的数据包
                    byte modified[] = recvPacket.getData();
                    times++;
                    //发送的与接受的不同则重发
                    if (sendbuffer[0] != modified[0]) {
                        i -= 1;
                        dup += 1;
                    }
                } catch (SocketTimeoutException timeoutExcep) {
                    //发送超时
                    System.out.println(timeoutExcep.getMessage());
                    i -= 1;
                }
    
            }
            
            System.out.println("发送次数: " + times);
            System.out.println("平均时间: " + time * 1.0    / 1000);
            System.out.println("包重复: " + dup);
        }
    
        public static void main(String args[]) throws Exception {
            new DatagramClient("localhost");
        }
    }

    package org.bq.udp;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    /**
     * @author 白强
     * @version 1.0
     */
    public class DatagramServer {
    
        public DatagramServer() throws Exception {
            System.out.println("UDP Server starting ...");
            DatagramSocket serverSocket = new DatagramSocket(8000);
            // 定义接收包和发送包,两者必须相同以比较
            byte[] receiveData = new byte[1];
            byte[] sendData = receiveData;
            // 服务器无限循环
            while (true) {
                // 接收数据
                DatagramPacket recvPacket = new DatagramPacket(receiveData,
                        receiveData.length);
                serverSocket.receive(recvPacket);
    
                String data = new String(recvPacket.getData());
                System.out.println("Server geting -------"+data);
                sendData = data.getBytes();
                // 得到发送者的IP地址和端口
                InetAddress IPAddress = recvPacket.getAddress();
                int port = recvPacket.getPort();
                // 将发送的数据直接返回
                DatagramPacket sendPacket = new DatagramPacket(sendData,
                        sendData.length, IPAddress, port);
                serverSocket.send(sendPacket);
            }
        }
    
        public static void main(String args[]) throws Exception {
            new DatagramServer();
        }
    }
  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    690. Employee Importance
    1723. Find Minimum Time to Finish All Jobs
    LeetCode 329 矩阵中最长增长路径
    7.2 物理内存管理
    LeetCode 面试题 特定深度节点链表
    LeetCode 100 相同的树
    npm安装包命令详解,dependencies与devDependencies实际区别
  • 原文地址:https://www.cnblogs.com/bq12345/p/3440790.html
Copyright © 2011-2022 走看看