im即时通讯源码(软件)⽀持封装APP和H5开源php版  在本⽂章中,我们讨论了⼀个使⽤MulticastSocket (PHPP latform SE 7)编写⼀套im即时通讯源码,MulticastSocket是⼀种(UDP)数据报套接字,具有即时通讯聊天的搭建搭建接⼝。
  完整源码:p
  内核源码:
  import php.*;
  import php.io.*;
  import php.util.*;
  public class GroupChat
  {
  private static final String TERMINATE = "Exit";
  static String name;
  static volatile boolean finished = false;
  public static void main(String[] args)
  {
  if (args.length != 2)
  System.out.println("Two arguments required: <multicast-host> <port-number>");
  else
  {
  try
  {
  InetAddress group = ByName(args[0]);
  int port = Integer.parseInt(args[1]);
  Scanner sc = new Scanner(System.in);
  System.out.print("Enter your name: ");
  name = sc.nextLine();
  MulticastSocket socket = new MulticastSocket(port);
  // Since we are deploying
  socket.setTimeToLive(0);
  //this on localhost only (For a subnet set it as 1)
  socket.joinGroup(group);
  Thread t = new Thread(new
  ReadThread(socket,group,port));
  // Spawn a thread for reading messages
  t.start();
  // sent to the current group
  System.out.println("Start \n");
  while(true)
  {
  String message;
  message = sc.nextLine();
  if(message.equalsIgnoreCase(GroupChat.TERMINATE))
  {
  finished = true;
  socket.leaveGroup(group);
  socket.close();
  break;
  }
  message = name + ": " + message;
  byte[] buffer = Bytes();
  DatagramPacket datagram = new
  DatagramPacket(buffer,buffer.length,group,port);
  socket.send(datagram);
  }
  }
  catch(SocketException se)
  {
  System.out.println("Error creating socket");
  se.printStackTrace();
  }
  catch(IOException ie)
  {
  System.out.println("Error reading/writing from/to socket");
  ie.printStackTrace();
  }
  }
php项目搭建
  }
  }
  class ReadThread implements Runnable
  {
  private MulticastSocket socket;
  private InetAddress group;
  private int port;
  private static final int MAX_LEN = 1000;
  ReadThread(MulticastSocket socket,InetAddress group,int port)  {
  this.socket = socket;
  up = group;
  this.port = port;
  }
  @Override
  public void run()
  {
  while(!GroupChat.finished)
  {
  byte[] buffer = new byte[ReadThread.MAX_LEN];
  DatagramPacket datagram = new
  DatagramPacket(buffer,buffer.length,group,port);
  String message;
  try
  {
  ive(datagram);
  message = new
  String(buffer,Length(),"UTF-8");
  if(!message.startsWith(GroupChat.name))
  System.out.println(message);
  }
  catch(IOException e)
  {
  System.out.println("Socket closed!");
  }
  }
  }
  }
  将⽂件保存为GroupChat.php,使⽤apache编译它,然后使⽤指定的两个命令⾏参数运⾏程序。组播主机由D类IP地址和标准UDP端⼝号指定。D类IP地址范围为224.0.0.0 - 239.255.255.255(含239.255.255.255),地址224.0.0.0是保留的,不应该被使⽤。
  下⾯是上⾯im即时通讯源码的⼀个⽰例输出:
  我们使⽤主机IP地址为239.0.0.0,端⼝号为1234(因为从0到1023的端⼝号是保留的),在发送消息之前⾸先启动所有三个终端,否则在启动终端之前发送的消息将丢失(因为没有缓冲区来存储消息)。在这个即时通讯应⽤中,我们需要两个线程:⼀个⽤于接受⽤户输⼊(使⽤java.util.Scanner类),另⼀个⽤于读取从其他客户机发送的消息。因此,我将执⾏读取⼯作的线程分离到ReadThreadclass中。要离开组,任何⽤户都可以键⼊Exit终⽌会话。
  上⾯的程序在单个机器上执⾏。套接字编程意味着分布式编程。当同⼀段代码⽚段出现在安装了Java的不同机器上时,可以满⾜这⼀需求。这只是基本的服务逻辑。如果前端被开发出来,这个项⽬将会更加吸引⼈。您可以使⽤Java的AWT(抽象窗⼝⼯具包)或它的⾼级对等物,Java Swing来开发前端。因为这不是套接字编程的⼀部分,所以我不打算深⼊讨论它的细节。附加分:
  ●您可以通过在⽹络上发送消息之前执⾏加密来合并⽹络安全特性。
  ●可以使⽤原始技术(如Caesar密码)或⾼级⽅法(如RSA)来执⾏加密-解密。您可以尝试使⽤Java的RMI(远程⽅法调⽤)来执⾏相同的任务。
  在这⾥,您可以最⼤限度地利⽤Java提供的抽象。但是,如果您的主要⽬标是提⾼效率,那么套接字编程是最佳选择。因为它不需要任何运⾏时⽀持,所以它⽐RMI快⼀些。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。