日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

im即时通讯源码(软件)支持封装APP和H5开源php版

發(fā)布時(shí)間:2023/12/10 php 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 im即时通讯源码(软件)支持封装APP和H5开源php版 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  在本文章中,我們討論了一個(gè)使用MulticastSocket (PHPP latform SE 7)編寫一套im即時(shí)通訊源碼,MulticastSocket是一種(UDP)數(shù)據(jù)報(bào)套接字,具有即時(shí)通訊聊天的搭建搭建接口。
  完整源碼:im.jstxym.top
  內(nèi)核源碼:
  import php.net.*;
  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 = InetAddress.getByName(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 typing messages...\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 = message.getBytes();
  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();
  }
  }
  }
  }
  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;
  this.group = 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
  {
  socket.receive(datagram);
  message = new
  String(buffer,0,datagram.getLength(),"UTF-8");
  if(!message.startsWith(GroupChat.name))
  System.out.println(message);
  }
  catch(IOException e)
  {
  System.out.println("Socket closed!");
  }
  }
  }
  }


  將文件保存為GroupChat.php,使用apache編譯它,然后使用指定的兩個(gè)命令行參數(shù)運(yùn)行程序。組播主機(jī)由D類IP地址和標(biāo)準(zhǔn)UDP端口號(hào)指定。D類IP地址范圍為224.0.0.0 - 239.255.255.255(含239.255.255.255),地址224.0.0.0是保留的,不應(yīng)該被使用。
  下面是上面im即時(shí)通訊源碼的一個(gè)示例輸出:

?


  我們使用主機(jī)IP地址為239.0.0.0,端口號(hào)為1234(因?yàn)閺?到1023的端口號(hào)是保留的),在發(fā)送消息之前首先啟動(dòng)所有三個(gè)終端,否則在啟動(dòng)終端之前發(fā)送的消息將丟失(因?yàn)闆](méi)有緩沖區(qū)來(lái)存儲(chǔ)消息)。在這個(gè)即時(shí)通訊應(yīng)用中,我們需要兩個(gè)線程:一個(gè)用于接受用戶輸入(使用java.util.Scanner類),另一個(gè)用于讀取從其他客戶機(jī)發(fā)送的消息。因此,我將執(zhí)行讀取工作的線程分離到ReadThreadclass中。要離開(kāi)組,任何用戶都可以鍵入Exit終止會(huì)話。
  上面的程序在單個(gè)機(jī)器上執(zhí)行。套接字編程意味著分布式編程。當(dāng)同一段代碼片段出現(xiàn)在安裝了Java的不同機(jī)器上時(shí),可以滿足這一需求。這只是基本的服務(wù)邏輯。如果前端被開(kāi)發(fā)出來(lái),這個(gè)項(xiàng)目將會(huì)更加吸引人。您可以使用Java的AWT(抽象窗口工具包)或它的高級(jí)對(duì)等物,Java Swing來(lái)開(kāi)發(fā)前端。因?yàn)檫@不是套接字編程的一部分,所以我不打算深入討論它的細(xì)節(jié)。附加分:
  ●您可以通過(guò)在網(wǎng)絡(luò)上發(fā)送消息之前執(zhí)行加密來(lái)合并網(wǎng)絡(luò)安全特性。
  ●可以使用原始技術(shù)(如Caesar密碼)或高級(jí)方法(如RSA)來(lái)執(zhí)行加密-解密。您可以嘗試使用Java的RMI(遠(yuǎn)程方法調(diào)用)來(lái)執(zhí)行相同的任務(wù)。
  在這里,您可以最大限度地利用Java提供的抽象。但是,如果您的主要目標(biāo)是提高效率,那么套接字編程是最佳選擇。因?yàn)樗恍枰魏芜\(yùn)行時(shí)支持,所以它比RMI快一些。

總結(jié)

以上是生活随笔為你收集整理的im即时通讯源码(软件)支持封装APP和H5开源php版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。