导航:首页 > 编程语言 > java开源im

java开源im

发布时间:2023-04-12 18:34:38

java 到底开源了吗

jdk是开源的。但Java并没有全部开源

Ⅱ Java是否免费

ASP不收费,VS收费,还有因为封闭,内部是否有后门,不确定,而且需要底层的调用,是需要购买服务的,而不是和JAVA一样,随意更改底层代码来实现,更强大的黑科技能力。JAVA也收费,只不过收费的现在差不多都倒闭了,不收费的反而越来越强大。

Ⅲ JAVA属于开源语言吗

JAVA开源与否与JAVA本身无关,开源不是开放编译器的源代码,而是写了一个软件, 然后把这个软件的源代码发布到网上, 让大家都可以学习,改进,就是开源。要符合一定的规范,比如GPL 等。

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,拥有全球最大的开发者专业社群。

Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。Java由James Gosling和同事们共同研发,并在1995年正式推出。

(3)java开源im扩展阅读

Java语言特点

1、简单性

Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。

例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。

2、面向对象

Java是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。

每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。

Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。

3、分布性

Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。

网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。

Ⅳ 一个IM系统是怎样开发的

竟然还有人问这个问题?!

im开发不难,难的是推广。如whatsapp,用freebsd+erlang就搞定了几千万用户,数据库就是erlang自带的那个。oschina上有大把开源的练手的im,服务器端从golang、java、php、只有你想不到,没有做不到的。

现凳裤在im的竞争已经进入了顷粗友粘性时代,你就是写的再好,没有熟人朋友在上面你会用多久?!人越少,交流机会越少,人就更少,恶性循环。所以陌陌才会打陌生人社交的牌,没办法,熟人交流向来是腾讯的天下,msn曾经有机会,当然也只能是曾经了。

现在im的竞争就是找一个需求,而这个需求腾讯还没有占领,而且不易占领的,才能侥幸成功。如陌陌的陌生人社交,和熟人社交完全是抵触的,所以才给陌陌流出了一点点机会。qq,微雀槐信是生活需求,办公需求与其不是很契合,钉钉才有有机会生长。

总之,im开发不难,难在没人用。死掉的im已经不计其数,如uc等等,不要再前赴后继做烈士了,这是我对你的最大劝告,当然你若有钱任性,只当我没说。

Ⅳ 如何用java开发基于jabber的IM软件

Jabber对于即时消息是一个开放的、基于XML的数据模型和协议。联系不断增加的基于Jabber开放资源和商业产品的数目,这种协议提供了摆脱即时消息服务器所有权束缚的一种方法。多种多样的开放资源Java APIs能够帮助你建立基于Jabber的服务器并将即时消息整合到你的应用程序中去。在这篇文章中专门阐述了这一点。
即时消息作为个人——个人通迅工具取得了显着的成功。在有些地方它已经作为在线联系的首选方法取代了email。现在,开发者正将这一技术应用到应用程序——个人和应用程序——应用程序通迅上。
直到最近,也只有少数服务提供商掌握了这一技术。通常流行的即时消息服务是建立在所有权协议基础上的通迅孤岛。实施面临一个困难的决策:支持多协议或锁定到一个单独的。不管哪种选择,实现都必须依赖一个属于即时消息(IM)服务提供商的服务器。
开放式协议能够帮助开发者摆脱所有权陷阱。其优势有多种:开放协议鼓励竞争实现的发展(一些开放资源)。他们鼓励广泛采用一种公共协议,这样可以阻止通迅孤岛和服务供应的孤立主义方法的发展。用多种方法,开放协议使因特网成为可能。在即时消息领域,开放协议确保封闭系统及协议不会阻碍基于IM服务器的发展的互操作性。
Jabber是一种针对即时消息和现场服务的开放协议。作为一个公共协议的最主要的侯选者,Jabber有潜力打破所有权在即时消息服务的控制。
这篇文章将解释如何实践发送简单Jabber消息和开发一个简单的基于开放标准及开放资源APIs和产品的布告服务器。
为什么使用Jabber?
Jabber标准和结构帮助创建一个分布式的IM系统,使人联想到分布在因特网上的email系统,用户在本地连接到这些系统。这个方法直接与象AIM(AOL即时信使)、ICQ、MSN(Microsoft网络)及Yahoo这样的流行服务提供商提供的单一系统结构作对,在那里一个单独的中央服务器或集中服务器组提供消息服务。Jabber在其他情形也类似于email结构:Jabber使用一个几乎与基本SMTP(简单邮件传输协议)方案一样的地址方案确定它的终点(人,机器,软件)地址。例如,[email protected]是一个有效的Jabber地址,或使用Jabber说法叫JID(Jabber ID)。因为这些原因,基于Jabber的系统衡量起来好于已存在的专有系统。加之,对于专有即时消息服务的网关允许的协议是必需的。
多种多样的Jabber服务器,包括我们在这篇文章中使用的其中之一,都是自由可使用的,意思就是说你不再需要依赖一个第三方IM服务提供商(第三方Jabber服务对于那些要求第三方主机服务的来说也是有用的)。
标准化
当讨论Jabber标准的益处时,我应该提及IETF IM标准的工作。在写这篇文章时,其IMPPWG(即时消息和现场协议工作组)已有多个RFC有效,其中最重要的是:
·RFC 2778:现场和即时消息模型
·RFC 2779:即时消息/现场协议要求
IMPPWG已经起草了一个名叫CPIM(公共现场和即时消息)协议的因特网标准。Jabber协议也是一个草拟的因特网标准,但不是IMPPWG工作的部份。
Jabber在哪儿适合这一标准工作呢?依照Jabber网站,Jabber是“承诺完全支持任何开放实时消息协议,包括IETF协议”。如果当对于这个IETF协议的支持增长时,Jabber打算将自己定位为IETF协议的领导开放资源的平台。到目前为止,IETF的工作更多地主要集中在收集要求上而不是执行。暂时,Jabber仅是一个带有重要开放资源支持的开放即时消息和现场服务协议。结果,它成为开放即时消息事实上的标准。
另一个值得密切注意的竞争对手是Sun微系统的Jxta协议,另一个基于XML针对peer-to-peer(P2P)应用程序开发者的协议。各种各样的Jxta实施在今天已经能够被提供。但是,由于其起源相对较近,Jxta比起Jabber只有很少的牵引力。
下载并安装
要开始使用Jabber,你首先需要下载必要的工具:你需要一个Jabber服务器,一个Jabber客户端,一个帮助管理和隐藏一些复杂socket处理的API,XML语法分析,消息创建等等。
Jabber服务器
为了运行Jabber,你选择的Jabber服务器不能有问题,自从他们都接受了标准Jabber XML及与终端应用程序通迅以释放负荷,其也是标准Jabber XML。Jabberd,最初的Jabber服务器,是开放资源(但不是基于Java),安装配置简单并在多数平台上都有效,包括Unix、Linux、Windows和Mac OS X。JabaServer开放资源方案也值得提及,但现在,这些基于Java的方案仍不如Jabberd成熟。同时,JabaServer安装不怎么简单易懂,因为你必须下载、安装并配置一个第三方数据库,加上创建必需的数据库规划。
对于这篇文章的例子,我选择Jabberd。当二进制及源下载对于jabberd都有效时,我就不在这儿描述怎样建立一个源发布。除非你真想自己编译,可以从jabberd 主页下载二进制发布。在Windows平台上安装是相对容易的。发布是一个.exe程序,按照安装向导一步一步执行。
安装完成后,你无需配置。在Windows2000,不要求配置。只要双击二进制程序就可启动服务器。
用户代理/客户
我决定使用Exos客户端,对于这个方案这是另一个开放资源技术。我尤其喜欢Exos的调试标签,可以允许你正确地查看客户发送和接收的XML。另外你能够作为纯粹的XML键入Jabber消息并将它们发送给服务器。所有这些都证明用Jabber协议和服务器测试的有用性。
Exos的安装简单易懂。下载Exos 压缩文件(我在文章中使用的是0.6版本)。将文件直接解压到你想要安装客户端的目录。在这个版本中,文件是些简单的二进制文件和一个.dll文件。你可以从 Muse 主页下载Muse API。
发送你的第一个Jabber消息
要发送一个Jabber即时消息,你必须初始化Muse Jabber API。通过创建一个JabberContext 类的实例来完成,接下来使用内容作为一个参数到Jabber session factory类的createSession()方法:
1 //初始化Jabber context
2 JabberContext jabberContext = new JabberContext("user", "pass", "localhost");
4 //创建一个Jabber session factory的实例
5 Jabber jabber = new Jabber();
6 //创建新会话
7 JabberSession jabberSession = jabber.createSession(jabberContext);
上面的例子在第2行显示了一个新context的创建。JabberContext存储了指定的用户相关信息(用户名、密码、用户地址)以及稍后要使用context建立session时包含的一个唯一的会话标识。为了阐述意图,我直接使用了username、password和server。
在第5行,一个Jabber session factory被创建,我们在第7行使用它创建了一个新的JabberSession,Muse进入由Jabber服务器提供的服务的主要接口。服务器的主要服务是:
·连接服务: 从Jabber服务器连接和断开
·用户服务: 针对用户鉴定及注册
·现场服务: 接收从其它用户/服务来的及你自己广播的现场信息
·登记表服务: 密友列表或地址薄
·聊天服务: 发送多种类型的消息—组聊、私聊、标题等等
·服务器服务: 获得与由这个Jabber服务器提供的服务相关的信息
·客户服务: 获得关于其他用户的信息,比如用户登录的最后时间
现在我们已经有了一个已经初始化的Jabber session,我们能够用它在我们才创建的JabberSession对象中使用connect()方法去连接到Jabber 服务器:
8 //连接到服务器
9 jabberSession.connect("localhost", 5222);
要连接到一个Jabber服务器,我们指定地址及在指定服务器上的机器端口号。标准来说,缺省Jabber端口是5222。
现在JabberSession已经连接到服务器,我们能够在我们的服务中用login()方法登录:
10 //登录到Jabber服务器
11 jabberSession.getUserService().login();
在第11行,我们使用JabberSession获得一个到UserService的引用,接下来在我们服务中调用login()方法。注意方法自身不指定任何用户信息。当在上面第7行JabberSession被创建时login()从与JabberSession相关的JabberContext中获得这些信息。
现在我们已经成功登录到Jabber服务器,我们能够开始发送和接收消息。下面代码段显示了如何构造一个简单的标题风格的消息:
12 //构造测试消息
13 JabberChatMessage msg = new
14 JabberChatMessage(JabberChatMessage.TYPE_HEADLINE);
15 msg.setSubject("Hello world");
16 msg.setBody("Hello world");
17 msg.setTo("user2@localhost");
在第13行,我们创建了一个JabberChatMessage实例。单个参数指定了我们要求的消息类型:TYPE_HEADLINE。JabberChatMessage类的名字容易引起误解,实际上,它可以用来包含在Jabber协议中定义的消息的任何四种类型—普通、聊天、标题及错误。在第15行,setSubject()和setBody()分别指定主题和内容。最后,setTo()在第17行设置消息接收器的JID。
在封装下,JabberChatMessage将所有这些信息转换成一个内在的DOM(文档对象模型)树,这样当我们已经准备好发送消息给Jabber服务器时能够轻松产生XML。
最后步骤:用sendMessage()方法发送消息:
18 //发送消息
19 jabberSession.sendMessage(msg);
在封装下
依据上面例子所得的事实,Muse API有效地隐藏了与连接管理和XML语法分析有关的所有细节,因此允许你集中精力在手边的任务上:创建一个消息服务。然而,理解一些基础协议交换证明是有用的。让我们关注一下当我们连接到服务器时发生的XML交换,登录,并象上面代码描述的一样发送消息。在下面的XML交换中,被客户接收的消息(我们例子代码)带了RECV前缀,送到服务器的消息带有SEND前缀:
SEND: <?xml version="1.0" encoding="UTF-8" ?>
<stream:stream to="localhost"
xmlns="jabber:client"
xmlns:stream="http://etherx.jabber.org/streams">
RECV: <stream:stream from="localhost" id="3D160545">
所有的Jabber交换都发生在一个XML流的上下文。在我们客户与Jabber服务器之间连接的生命期间,两个完全的XML文档在一个时间传输一个片段。上面显示的最初交换允许客户开始发送XML流文档到服务器并且服务器开始发送XML流文档到客户。
下面,一个要求鉴定的信息被发送给服务器:
SEND: <iq xmlns="jabber:client" type='get' id='id_10028'>
<query xmlns="jabber:iq:auth">
<username>user</username>
</query>
</iq>
RECV: <iq xmlns="jabber:client" type='result' id='id_10028'>
<query xmlns="jabber:iq:auth">
<username>user</username>
<password />
<digest/>
<sequence>482</sequence>
<token>3D15E63A</token>
<resource />
</query>
</iq>
在用户鉴定程序前述那段显示了第一次交换。开始,客户向服务器询问哪种鉴定方式对于给定用户是有效的。服务器段用下面的鉴定方法回答:
·Plain 文本:<password />标签
·零知识鉴定:使用<sequence>和<token>标签
·<digest/>:象plain文本,但密码是SHA-1 (安全无序运算法则)-用用户的plain文本密码进行编码
我们实际上使用<digest/>,象下面代码段描述的一样:
SEND: <iq xmlns="jabber:client" type='set' id='id_10030'>
<query xmlns="jabber:iq:auth">
<username>user</username>
<hash></hash>
<resource>Home</resource>
</query>
</iq>
RECV: <iq xmlns="jabber:client" type='result' id='id_10030'></iq>
在这一点,用户连接到服务器并能够开始发送和接收消息:
SEND: <message xmlns="jabber:client" type='headline'
id='id_10032' to='user2@localhost'>
<thread xmlns="jabber:client">id_10033</thread>
<subject xmlns="jabber:client">Hello world</subject>
<body xmlns="jabber:client">Hello world</body>
</message>
上面片段显示了我们发送给接收者user2@localhost的测试标题消息。
你可能已经注意到在前述协议段有一个重复出现元素:ID标签。因为session能够由多个异步会话组成,ID标签匹配查询并响应。
接收消息
自从这篇文章的主要方向是向你显示如何开发一个报警系统,我就很少注意消息接收。然而,为了完整性的利益,我应该讨论在Muse API中处理接收消息的一些有用特性。另外,因为报警服务是被登录到Jabber服务器的用户执行的,你能够适当地期望一些消息接收者试图与发送者通信。
Muse使用一个listener附在session上以接收进入消息的提示。下面代码显示了如何创建一个listener并将其附到session——listener实际上附加到连接上,但自从我们的接口是在session级别并且JabberSession类有一个便利的方法添加一个listener,我们就将其附加到session:
1 jabberSession.addMessageListener(
2 new JabberMessageListener() {
3 public void messageReceived(JabberMessageEvent event) {
4 if (event.getMessageType() == JabberCode.MSG_CHAT ) {
5 JabberChatMessage msg =
6 (JabberChatMessage)event.getMessage();
7 JabberChatMessage reply = new
8 JabberChatMessage(JabberChatMessage.TYPE_HEADLINE);
9 reply.setTo(msg.getFrom());
10 reply.setSubject("Re: "+msg.getSubject());
11 reply.setBody(
12 "I'm just a sender: please send messages to someone else");
13
14 //发送消息
15 jabberSession.sendMessage(reply);
16 }
17 }
18 }
19 );
客户能够添加几个消息listeners,每次一个消息被接收它们都要被调用。典型的,你为要处理的每一个类型的消息添加一个listener。另一个选择:为同一种消息类型但在那些消息中的每一种不同的行为添加多个listeners。然而另一种选择将添加一个要处理所有消息类型的listener。选择依赖于你想完成什么。
在上面的例子中,一个单独的listener被附加。Listener必须是实现JabberMessageListener接口的类的一个实例。这个接口要求一个要被执行的单个方法: void messageReceived(JabberMessageEvent)。当一个消息从服务器被接收时这个方法将被调用。在例子代码中,messageReceived()方法首先检查在第4行接收的消息类型。自从Jabber用户代理使用了MSG_CHAT类型发送消息,就只对这种类型消息才感兴趣。在第5行,Jabber消息从JabberMessageEvent 提取。在第9行通过设置收件人接收消息被用来构成一个给消息发送者的回复并且在第10行拷贝接收消息的主题。一个缺省错误文本被作为消息体在第11行被设置,并且,在第15行,消息使用前面例子同样的方法利用JabberSession对象的sendMessage()方法传输。
试试Jabber
这篇文章提供了一个对于Jabber协议及少量你能够将这一技术应用到你的应用程序中去的开放资源方案的基本介绍。对这个协议有用的应用程序多种多样,并不限于传统P2P感觉的即时消息领域。例如,jogger.jabber.org提供的Jogger,一个允许你通过发送一个消息给Weblog应用程序(blog)就能更新个人网络杂志的有趣服务。Jabber在用户服务应用程序及其它结构的协作类型应用程序同样有很大的影响。
象上面例子所显示的一样,你使用一个API如Muse或JabberBeans在少许几行Java代码中就能够完成即时消息功能。记住我不能掩盖一些Jabber其它重要的特征,如现场服务和登记表管理,这些在使用时都是相关的。另一个重要的特征是Jabber服务器的模块性和可扩展性,它允许一个开发者创建新的服务直接整合进服务器。

http://wiki.jabbercn.org/space/start

Ⅵ java有什么常用开源的框架

java常用开源框架如下:x0dx0a1.Spring Framework 【Java开源JEE框架】x0dx0ax0dx0aSpring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 x0dx0ax0dx0a2.WebWork 【Java开源Web开发框架】x0dx0ax0dx0aWebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。x0dx0ax0dx0a3.Struts 【Java开源Web开发框架】x0dx0ax0dx0aStruts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中x0dx0ax0dx0a4.Hibernate 【Java开源持久层框架】x0dx0ax0dx0aHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合x0dx0ax0dx0a5.Quartz 【Java开源调度框架】x0dx0ax0dx0aQuartz是OpenSymphony开源组织在Job scheling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。x0dx0ax0dx0a6.Velocity 【Java开源模板引擎】x0dx0ax0dx0aVelocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 x0dx0ax0dx0a7.IBATIS 【Java开源持久层框架】x0dx0ax0dx0a使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句。相对Hibernate等 “全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统 设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显 得别具意义。

Ⅶ GitHub上面有哪些经典的java框架源码

Ⅷ java可以搭建im即时通讯吗

是的,Java可以用来构建即时通讯(IM)应用程序。Java是一种流行的编程语言,拥有许多开发框架和库,可以帮助开发者快速构建IM应用程序。

一些Java库和框架可以用于构建IM应用程序,例如:

Ⅸ 现有几个开源IM框架

开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类:1.分布式爬虫:Nutch
2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector
3. 非JAVA单机爬虫:scrapy
第一类:分布式爬虫
爬虫使用分布式,主要是解决两个问题:
1)海量URL管理
2)网速
现在比较流行的分布式爬虫,是Apache的Nutch。但是对于大多数用户来说,Nutch是这几类爬虫里,最不好的选择,理由如下:
1)Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有太大的意义。也就是说,用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新写一个分布式爬虫框架了。

Ⅹ java可以开发im即时通讯吗

可以,java开发即时通讯也不难,你可以用即构科技的毁链前im sdk来实现,即构科技有20年经验的开发团队唤带保障,支持Android、iOS、Windows、macOS、Web、小程序、Flutter、uniapp等平台,延时在 200 ms 以内的消息传输 ,消息100%有序可靠。纤清可针对自身业务场景,定制所需服务规格。

阅读全文

与java开源im相关的资料

热点内容
安卓怎么换相机 浏览:933
华为相片文件夹怎么删除重复照片 浏览:314
plc编程视频教程大全 浏览:938
直播用哪个app播放背景音乐 浏览:850
点歌机系统app在哪里下载 浏览:609
javadate类型转换string 浏览:694
RPG游戏解压后乱码 浏览:988
无线通信的几个密钥算法 浏览:644
王者荣耀app数据修复在哪里 浏览:429
基于单片机饮水机温度控制系统的设计 浏览:455
c中委托被编译后的结构 浏览:152
飞燕app怎么注销账号 浏览:895
cad命令缩小 浏览:154
linux发展史 浏览:629
服务器选用什么CPU比较好 浏览:334
明星怎么宣传安卓 浏览:953
8255芯片编程 浏览:65
java文件bat运行 浏览:747
java常见笔试 浏览:529
360程序员模式 浏览:363