java多线程启动-网络通讯

多线程启动-网络通讯

  • 通过InetAddress类调用getLocalHost()方法返回主机的信息
package net_app;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InterAdderssDemo1 {
    public static void main(String[] args) {

        try {
            InetAddress address=InetAddress.getLocalHost();
            System.out.println("主机名:"+address.getHostName());
            System.out.println("主机地址:"+address.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}
package net_app;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class InterAdderssDemo1 {
    public static void main(String[] args) {
        try {
            //本地地址ip对象的获取
            InetAddress address=InetAddress.getLocalHost();
            System.out.println("主机名:"+address.getHostName());
            System.out.println("主机地址:"+address.getHostAddress());

            //获取域名ip对象
            InetAddress address1=InetAddress.getByName("www.baidu.com");
            System.out.println("主机名:"+address1.getHostName());
            System.out.println("主机地址:"+address1.getHostAddress());

            //获取公网的ip地址对象
            InetAddress address3=InetAddress.getByName("110.42.192.92");
            System.out.println("主机名:"+address3.getHostName());
            System.out.println("主机地址:"+address3.getHostAddress());

            //判断是否可以ping通
            System.out.println(address3.isReachable(5000));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
输出结果:

主机名:DESKTOP-S2VBNQD
主机地址:192.168.3.127
主机名:www.baidu.com
主机地址:220.181.38.150
主机名:110.42.192.92
主机地址:110.42.192.92
true

Process finished with exit code 0

image-20220301202613159

image-20220301202624683

image-20220301203309337

UDP通讯

image-20220301203654992

image-20220301203833440

image-20220301203940123

TakePro发送端

package net_app;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;

public class TakeProt {
    public static void main(String[] args) {
        try{
            //发送
            DatagramSocket take=new DatagramSocket();
            byte[] data="这是发送端需要发送的信息".getBytes();
            //发送的资源包
            DatagramPacket packet=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),9999 );

            take.send(packet);
            System.out.println("数据已经发送");

            take.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

SendPort接受端

package net_app;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class SendPort {
    public static void main(String[] args) {
        //接受
        try {
            byte[] data=new byte[1024*64];
            //接受的数据包
            DatagramPacket pake=new DatagramPacket(data,data.length);
            DatagramSocket take=new DatagramSocket(9999);
            take.receive(pake);

            int len=pake.getLength();
            String s=new String(data,0,len);
            System.out.println("接受到的数据包:"+s);

            take.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}
UDT通讯
package net_app;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class SendPort {
    public static void main(String[] args) {

        try {
            byte[] data=new byte[1024*64];
            //接受
            DatagramSocket take=new DatagramSocket(9999);

            while (true) {
                //接受的数据包
                DatagramPacket pake=new DatagramPacket(data,data.length);
                take.receive(pake);
                int len=pake.getLength();
                String s=new String(data,0,len);
                System.out.println("接受到"+pake.getAddress()+"的数据包:"+s);
                if("exit".equals(s)){
                    take.close();
                    break;
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
package net_app;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class TakeProt {
    public static void main(String[] args) {
        try{
            //发送
            DatagramSocket take=new DatagramSocket();
            Scanner scanner=new Scanner(System.in);
            String s;

            while (true) {
                System.out.println("请说:");
                s=scanner.nextLine();
                byte[] data=s.getBytes();
                //发送的资源包
                DatagramPacket packet=new DatagramPacket(data,data.length,InetAddress.getLocalHost(),9999 );
                take.send(packet);
                if("exit".equals(s)){
                    take.close();
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

组播与广播

image-20220302083239073

TCP通讯

image-20220302083645534

image-20220302083915787

image-20220302085907305

客服端数据发送

package Socket;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketClientDome1 {
    public static void main(String[] args) {
        try {
            InetAddress host=InetAddress.getLocalHost();
            Socket s=new Socket(host.getHostAddress(),2580);
            OutputStream out=s.getOutputStream();

            PrintStream p=new PrintStream(out);
            p.print("TCP 的通讯开始");
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
服务端接受数据
package Socket;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerSocketDome1 {
    public static void main(String[] args) {
        try {
            ServerSocket server=new ServerSocket(2580);

            Socket s=server.accept();
            System.out.println();
            byte[]  b=new byte[1024*6];
            InputStream i=s.getInputStream();
            int len=i.read(b);
            System.out.println(new String(b,0,len));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

image-20220302093424438

image-20220302093451865

TCP的多发多收
服务端
package SocketDome1;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class ServerSocketDome {
    public static void main(String[] args) {
        try {
            ServerSocket server=new ServerSocket(2580);
            Socket s=server.accept();
            InputStream i=s.getInputStream();
            BufferedReader b=new BufferedReader(new InputStreamReader(i));
            String str;
          //  System.out.println("主机ip: "+" 主机端口: "+server.getLocalPort()+"接受信息:"+str);

            while(null!=(str=b.readLine())){
                i=s.getInputStream();
                b=new BufferedReader(new InputStreamReader(i));
                System.out.println("主机ip: "+s.getRemoteSocketAddress()+"接受信息:"+str);
                if("exit".equals(str)){
                    break;
                }
            }
            System.out.println();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
客户端
package SocketDome1;

import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

//客户端
public class SocketClientDome {
    public static void main(String[] args) {
        try {
            InetAddress host=InetAddress.getLocalHost();
            Socket s=new Socket(host.getHostAddress(),2580);
            Scanner sc=new Scanner(System.in);
            OutputStream out1=s.getOutputStream();
            PrintStream p=new PrintStream(out1);
            String str=null;
            while (true) {
                System.out.println("请输入:");
                str=sc.nextLine();
                p.print(str+"\n");
                if("exit".equals(str)){
                    out1.close();
                    s.close();
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
利用多线程实现多发多收
多线程类
package SocketDome3;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class MySocketThread extends Thread {
    private Socket s;

    public MySocketThread(Socket s) {
        this.s = s;
    }

    @Override
    public void run() {
        String str = null;
        InputStream i = null;
        try {
            i = s.getInputStream();
            BufferedReader b = new BufferedReader(new InputStreamReader(i));
            while (null != (str = b.readLine())) {
                System.out.println("主机ip: " + s.getRemoteSocketAddress() + "接受信息:" + str);
                if ("exit".equals(str)) {
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
服务端
package SocketDome3;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

//服务端
public class ServerSocketDome {
    public static void main(String[] args) {
        try {
            ServerSocket server=new ServerSocket(2580);
            while(true){
                Socket s=server.accept();
                MySocketThread m=new MySocketThread(s);
                m.start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
客户端
package SocketDome3;

import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

//客户端
public class SocketClientDome {
    public static void main(String[] args) {
        try {
            InetAddress host=InetAddress.getLocalHost();
            Socket s=new Socket(host.getHostAddress(),2580);
            Scanner sc=new Scanner(System.in);
            OutputStream out1=s.getOutputStream();
            PrintStream p=new PrintStream(out1);
            String str=null;
            while (true) {
                System.out.println("请输入:");
                str=sc.nextLine();
                p.print(str+"\n");
                if("exit".equals(str)){
                    out1.close();
                    s.close();
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

TCP多台客户端通过线程池发送数据

多线程启动

/**
 * 线程启动
 * */

package SocketDome3;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class MySocketThread extends Thread {
    private Socket s;

    public MySocketThread(Socket s) {
        this.s = s;
    }

    @Override
    public void run() {
        String str = null;
        InputStream i = null;
        try {
            i = s.getInputStream();
            BufferedReader b = new BufferedReader(new InputStreamReader(i));
            while (null != (str = b.readLine())) {
                System.out.println("主机ip: " + s.getRemoteSocketAddress() + "接受信息:" + str);
                if ("exit".equals(str)) {
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

服务端接受数据

package SocketDome3;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

//服务端
public class ServerSocketDome {
    private static ExecutorService poll=new ThreadPoolExecutor(3,5,6, TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(2));
    public static void main(String[] args) {
        try {
            ServerSocket server=new ServerSocket(2580);
            while(true){
                Socket s=server.accept();
                System.out.println(s.getRemoteSocketAddress()+"上线成功");
                Runnable tager=new MySocketThread(s);
                poll.execute(tager);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客户端发送数据

package SocketDome3;

import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

//客户端
public class SocketClientDome {
    public static void main(String[] args) {
        try {
            InetAddress host=InetAddress.getLocalHost();
            Socket s=new Socket(host.getHostAddress(),2580);
            Scanner sc=new Scanner(System.in);
            OutputStream out1=s.getOutputStream();
            PrintStream p=new PrintStream(out1);
            String str=null;
            while (true) {
                System.out.println("请输入:");
                str=sc.nextLine();
                p.print(str+"\n");
                if("exit".equals(str)){
                    System.out.println(s.getRemoteSocketAddress()+"已经下线");
                    out1.close();
                    s.close();
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

image-20220302142805310

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值