美文网首页
Java网络聊天程序

Java网络聊天程序

作者: 粑粑八成 | 来源:发表于2020-02-02 10:18 被阅读0次

UDP:
1、指定socket端口
2、在发送的包中指定发送到的地址和端口
3、发送的包中的端口必须和接受端的socket端口相同
java网络编程UDP
IO流,字符字节流转换,输入流
多线程

package UdpTest;

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

public class TalkReceive implements Runnable {

  private DatagramSocket server;

  public TalkReceive(int port) {
    try {
      this.server = new DatagramSocket(port);
    } catch (SocketException e) {
      e.printStackTrace();
    }
  }

  @Override
  public void run() {
    while (true) {
      byte[] container = new byte[1024 * 60]; // 60k
      DatagramPacket packet = new DatagramPacket(container, container.length);
      // 4、阻塞式接收包裹receive(DatagramSocket p)
      try {
        server.receive(packet);
        // 5、分析数据
        //    byte[] getData()
        //    getLength()
        byte[] datas = packet.getData();
        int len = packet.getLength();
        String msg = new String(datas, 0, len); // 制定长度,必须,否则默认按字节数组长度,equal比较会报错,我日
        if (msg.equals("exit")) {
          break;
        }
        System.out.println("对方说:" + msg);
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    // 6、释放资源
    server.close();
  }
}
package UdpTest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class TalkSend implements Runnable {

  private DatagramSocket client;
  private BufferedReader reader;
  private String toIP;
  private int toPort;

  public TalkSend(int port, String toIp, int toPort) {
    this.toIP = toIp;
    this.toPort = toPort;
    try {
      this.client = new DatagramSocket(port);
      this.reader = new BufferedReader(new InputStreamReader(System.in));
    } catch (SocketException e) {
      e.printStackTrace();
    }
  }

  @Override
  public void run() {
    while (true) {
      String msg = null;
      try {
        msg = this.reader.readLine();
        byte[] datas = msg.getBytes();
        // 3、封装成DatagramSocket包裹,需要指定目的地
        DatagramPacket packet = new DatagramPacket(datas, datas.length,
            new InetSocketAddress(this.toIP,
                this.toPort));
        // 4、发送接收包裹receive(DatagramSocket p)
        this.client.send(packet);
        if (msg.equals("exit")) {
          break;
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    client.close();
  }
}
package UdpTest;

public class TalkStudent {

  public static void main(String[] args) {
    new Thread(new TalkSend(7777, "localhost", 9999)).start(); //发送

    new Thread(new TalkReceive(8888)).start(); // 接收
  }
}
package UdpTest;

public class TalkTeacher {

  public static void main(String[] args) {
    new Thread(new TalkReceive(9999)).start(); // 接收

    new Thread(new TalkSend(5555, "localhost", 8888)).start(); //发送
  }
}

相关文章

  • Java网络聊天程序

    UDP:1、指定socket端口2、在发送的包中指定发送到的地址和端口3、发送的包中的端口必须和接受端的socke...

  • JMM

    Java Memory Model ,JMM Java内存模型(图片来源于网络,侵删。) 程序计数器 Java虚拟...

  • 用JAVA开发的程序为什么更安全

    用JAVA开发的程序为什么更安全 java几乎成为网络程序的标准语言 ,java给我们提供了先进的应用技术的同时,...

  • Java网络编程

    Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。 java.net...

  • JDK序列化官方指南

    在网络中数据传输都是以字节数组传输的,而在java程序中操作的是类对象。java程序中对象到对象的传递在网络中的传...

  • Java网络编程笔记

    网络编程概述 Java是Internet上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见...

  • Java网络编程

    基于Java的网络编程,是通过Java提供的API,来实现网络互连的不同计算机上运行的程序之间的数据交换 TCP网...

  • 2019java开发者联盟交流火热报名中...

    2019java开发者联盟交流火热报名中... 了解java技术 Java 是几乎所有类型的网络应用程序的基础,也...

  • 【Jvm】运行时数据区域

    内容来自《深入理解Java虚拟机》和网络。 本篇结构: 程序计数器 Java 虚拟机栈 本地方法栈 Java 堆(...

  • 那些不加班的Java程序员,最后怎么样了?

    程序员一直都是网络上比较火的名词,尤其是现在需求最高的Java程序员。网上调侃Java程序员的段子不少,比如下图北...

网友评论

      本文标题:Java网络聊天程序

      本文链接:https://www.haomeiwen.com/subject/migfxhtx.html