网络编程例题

UDP聊天案例

1.分别建立一个接受端作为聊天内容的接收,创建多个客服端发送信息

接受端

复制代码
public static void main(String[] args) throws IOException {
        //定义一个指定端口的接收端对象,开放端口接受数据
        DatagramSocket server = new DatagramSocket(9985);
        //定义一个字节数组接收数据
        byte[] bys = new byte[1024];
        //接受数据报对象
        DatagramPacket packet = new DatagramPacket(bys,bys.length);
        InetAddress addr = packet.getAddress();
        //显示数据信息
        System.out.println("等待接受数据...");
        while(true){
            server.receive(packet);
            //packet.getdata获取数据报中的数据
            //packet.getLength()获取数据报中的数据长度
            String str = new String(packet.getData(),0,packet.getLength());
            System.out.println("来自"+addr+"的数据: "+str);
        }
    }
复制代码

发送端

 

复制代码
  public static void main(String[] args) throws IOException {
        InetAddress addr = InetAddress.getByName("localhost");
        //创建发送数据的端口
        DatagramSocket client = new DatagramSocket(3000);
        //通过键盘输入发送信息
        while(true){
            Scanner sc = new Scanner(System.in);
            String str = sc.nextLine();
            if(!str.equals("886")){
                //封装成数据报
                DatagramPacket packet = new DatagramPacket(str.getBytes(),str.length(),addr,9985);
                //发送数据
                client.send(packet);
            }else{
                client.close();
                break;
            }
        }


    }
复制代码

 

2.与线程结合使用

复制代码
//接受端
class ChatReciver implements Runnable{
    private DatagramSocket server;
    ChatReciver(){

    }
    ChatReciver(DatagramSocket server){
        this.server = server;
    }
    @Override
    public void run() {
        try{
            byte[] bys = new byte[1024];
            DatagramPacket packet = new DatagramPacket(bys,bys.length);
            while(true){
                //接受数据
                server.receive(packet);
                String str = new String(packet.getData(),0,packet.getLength());
                System.out.println("来自"+packet.getAddress()+"的信息: "+str);
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}
//发送端
class chatSend implements Runnable{
    private DatagramSocket client;
    private int targerport;
    public chatSend(){

    }
    public chatSend(DatagramSocket client,int targerport){
        this.client=client;
        this.targerport=targerport;
    }
    @Override
    public void run() {
        Scanner sc = new Scanner(System.in);
        while(true){
            String str = sc.nextLine();
            byte[] bys = str.getBytes();
            try {
                DatagramPacket packet = new DatagramPacket(bys,bys.length,
                        InetAddress.getByName("127.0.0.1"),targerport);
                client.send(packet);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
public class chatSystem {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入服务启动端口");
        int serverport = sc.nextInt();
        System.out.println("请输入对象目标端口");
        int targerport = sc.nextInt();
        System.out.println("聊天系统启动");
        try{
            DatagramSocket socket = new DatagramSocket(serverport);
            //分别启动发送端和接受端
            new Thread(new ChatReciver(socket),"接受服务").start();
            new Thread(new chatSend(socket,targerport),"发送服务").start();
            new Thread(new chatSend(socket,targerport),"发送服务").start();
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

}
复制代码

TCP案列

 客服端

复制代码
public static void main(String[] args) throws IOException {
        //创建Socket对象,并指定服务器端
        Socket client = new Socket(InetAddress.getLocalHost(),9985);
        //获取服务端的数据并打印
        InputStream is = client.getInputStream();
        byte[] bys = new byte[1024];
        int len ;
        while((len=is.read(bys))!= -1){
            System.out.println(new String(bys,0,len));
        }
        is.close();
        client.close();
    }
复制代码

服务端

复制代码
public static void main(String[] args) throws IOException {
        //指定端口号的服务端对象
        ServerSocket server = new ServerSocket(9985);
        while(true){
            //接收数据
            Socket client =server.accept();
            System.out.println("连接成功,开始交互数据");
           //获取客户端的输出流对象
            OutputStream os = client.getOutputStream();
            //输出数据
            os.write("已收到".getBytes());
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            os.close();
            client.close();
        }
    }
复制代码

 

posted @   panther125  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示