Socket实现手机聊天室

来源:互联网 发布:java 时间戳转成date 编辑:程序博客网 时间:2024/05/16 07:25
        趁着放假的这几天,根据之前学的Java me方面的知识,做了一个基于Socket的手机聊天小软件。主要是通过一台Internate上的服务器转发聊天信息。 一、服务器。思路:在服务器端,构造一个Server类的实例,Server类的实例的职责:打开Socket端口等待用户连接、保存用户连接信息。除了重要的Server类,还建立了存储用户连接信息(用户ID,Socket实例)的Custem类,以及在服务器和终端用户之间的信息Message类。接下来就逐个的具体介绍。(1)   Server类。它的职责是打开本地的端口,并且通过一个内置的线程类监听连接请求,为每个连接到服务器的终端自动分配一个ID,将用户的连接及ID封装到Custem实例中,并且通过Hashtable记录下每个终端连接。  下面是Server类的结构:
 
下面是Server类的代码(2) Custem类。用于构造用户类,每个连接服务器的用户都拥有一个Custem类的实例线程与之对应,每个用户都有用户ID属性。服务器可通过Custem实例与用户通信,Custem通过信息的分析可准确的将信息向相应的终端用户发送。下面是Custem类的结构:
 
下面是Custem类的代码:(3)   Message类。由于使用Socket,不能直接传送自定义的类,但是如果单纯使用String,则难以实现传送完整信息的功能。于是自定义了一个Message类,它可以将发送方,接收方的ID以及待发的信息封装到Message实例中,并且通过toString()方法转换成“发送方ID&接受方ID&聊天信息”格式的String,还可以通过fromString()方法从格式后的String分别读出信息元素。这样就能够方便的实现信息交流。下面是Message类的结构:
下面是Message类的代码: 服务器端已经介绍完毕,接下来是手机客户端了。二、客户端 思路:在终端手机上使用java me通过Socket连接服务器端。处理待发信息并发送给服务器,并通过内置线程类监听Socket以读取信息。整个客户端包含两个java文件,分别是主程序文件SocketClient.java、与服务器端相对应的Message.java。 (1)   SocketClient类。继承了MIDplet类,构造了手机应用程序。主要职责是连接服务器端,并处理聊天信息。下面是SocketClient类的结构:
 
下面是SocketClient类的代码:(2)   Message类。与服务器端的Message类相同,这里就不介绍了。 三、测试环境。服务器端的IP地址是192.168.11.3,Socket端口是9999。手机终端使用Sun WTk 2.5.2模拟。  四、测试结果。成功实现预期功能。实验截图如下:
总结:至此已介绍完毕。发现Socket传输信息是很麻烦的,如果使用较高层的传输技术如Webservice等可简化实现。这个留到以后再探讨了。
原创粉丝点击