欢迎光临
我们一直在努力

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

在本文章中,我们讨论了一个使用MulticastSocket (PHPP latform SE 7)编写一套im即时通讯源码,MulticastSocket是一种(UDP)数据报套接字,具有即时通讯聊天的搭建搭建接口。
完整源码:im.jstxym.top
内核源码:
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!");
}
}
}
}

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

将文件保存为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即时通讯源码的一个示例输出:

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

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

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

我们使用主机IP地址为239.0.0.0,端口号为1234(因为从0到1023的端口号是保留的),在发送消息之前首先启动所有三个终端,否则在启动终端之前发送的消息将丢失(因为没有缓冲区来存储消息)。在这个即时通讯应用中,我们需要两个线程:一个用于接受用户输入(使用java.util.Scanner类),另一个用于读取从其他客户机发送的消息。因此,我将执行读取工作的线程分离到ReadThreadclass中。要离开组,任何用户都可以键入Exit终止会话。
上面的程序在单个机器上执行。套接字编程意味着分布式编程。当同一段代码片段出现在安装了Java的不同机器上时,可以满足这一需求。这只是基本的服务逻辑。如果前端被开发出来,这个项目将会更加吸引人。您可以使用Java的AWT(抽象窗口工具包)或它的高级对等物,Java Swing来开发前端。因为这不是套接字编程的一部分,所以我不打算深入讨论它的细节。附加分:
●您可以通过在网络上发送消息之前执行加密来合并网络安全特性。
●可以使用原始技术(如Caesar密码)或高级方法(如RSA)来执行加密-解密。您可以尝试使用Java的RMI(远程方法调用)来执行相同的任务。
在这里,您可以最大限度地利用Java提供的抽象。但是,如果您的主要目标是提高效率,那么套接字编程是最佳选择。因为它不需要任何运行时支持,所以它比RMI快一些。

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《im即时通讯源码(软件)支持封装APP和H5开源php版》
文章链接:https://www.456zj.com/36335.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址