Android聊天室_第1页
Android聊天室_第2页
Android聊天室_第3页
Android聊天室_第4页
Android聊天室_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、仔仔细细手把手教你如何写一个Android聊天室,你一定能懂 今天,我们来讲Android聊天室实例开发项目,通过此项目来帮助我们了解Socket网络编程,希望对大家有所帮助。开发之前,我们有必要了解下一些基本知识如下:1、 服务器端ServerSocket:它常用的构造函数是ServerSocket(int port),该构造函数创建的ServerSock对象可以将这个ServerSocket绑定到一个指定的端口上,通过该程序所在计算机的IP地址以及这个端口号,客户端Socket才能连接该ServerSocket。2、 客户端Socket:它常用的简单构造函数是Socket(String h

2、ost,int port),该构造函数根据两个参数连接指定的主机地址和端口号上运行的服务器程序。注意:在创建Socket时如果发生错误,将产生IOException,在程序中必须对之进行处理。所以在创建Socket或ServerSocket时,必须捕获或抛出异常。Socket常用的方法还有以下几种:(1)、getInputStream():返回套接字的输入流,通过得到的输入流可以获取信息。(2)、getOutputStream():返回此套接字的输出流,通过得到的输出流可以输出信息。关闭Socket的方法: 每一个Socket存在时,都讲占用一定的资源,在Socket对象使用完毕时,将其关闭。

3、关闭Socket可以调用Socket的Close()方法。在关闭Socket之前,应将与Socket相关的所有的输入/输出流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与Socket相关的所有的输入/输出流该首先关闭,然后再关闭Socket。Socket通信的一般过程:(1)、服务器端程序创建一个ServerSocket,然后调用accept()方法等待客户连接。(2)、客户端程序创建一个Socket并请求与服务器程序建立连接。(3)、服务器端程序接受客户端的连接请求,并创建一个新的Socket与该客户建立专线连接。(4)、建立了连接的客户端及服务端的两个Socket在一个由服务器端程序

4、创建的单独的线程上对话,对话的方式采用getInputStream()、getOutputStream()得到的输入与输出流进行读取与输出。(5)、服务器端开始等待新的连接请求,重复(2)(5)的过程。 好了,我们有了上面的基础之后之后,我们就开始我们的Socket聊天室编程之旅吧。 首先,我们要了解下,我们这个项目的整天框架,聊天室主要包括两部分:1、服务器端。2、客户端;对于服务器端,我们在PC上采用纯java设计图形界面,而客户端主要是手机客户端。下面我们就开始编写服务器端界面设计程序。1、 新建一个Java项目,命名为PCChat,在该项目中,新建一个java类,命名为Server.j

5、ava,这就是PC服务器端的主界面。2、 主界面截图如下:3、 主界面代码如下:html view plaincopypackage com.wyf.wpf; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; imp

6、ort javax.swing.JTextArea; public class Sever extends JFrame implements ActionListener / 声明两个布局 BorderLayout borderLayout1 = new BorderLayout(); BorderLayout borderLayout2 = new BorderLayout(); / 创建面板和按钮 JPanel jPanel1 = new JPanel(); JPanel jPanel2 = new JPanel(); JButton jButton1 = new JButton();

7、JButton jButton2 = new JButton(); JScrollPane jScrollPane1 = new JScrollPane(); / 创建服务器端接受消息文本框 static JTextArea jTextArea = new JTextArea(); / 声明ServerThread线程类对象 ServerThread serverThread; / 构造函数,用于初始化面板 public Sever() getContentPane().setLayout(borderLayout1); jButton1.setText(启动服务器); jButton1.ad

8、dActionListener(this); jButton2.setText(关闭服务器); jButton2.addActionListener(this); this.getContentPane().add(jPanel1, BorderLayout.NORTH); jPanel1.add(jButton1); jPanel1.add(jButton2); jTextArea.setText(); jPanel2.setLayout(borderLayout2); jPanel2.add(jScrollPane1, BorderLayout.CENTER); jScrollPane1.

9、getViewport().add(jTextArea); this.getContentPane().add(jPanel2, BorderLayout.CENTER); this.setSize(400, 400); this.setVisible(true); / 服务器界面中按钮事件处理 Override public void actionPerformed(ActionEvent e) / TODO Auto-generated method stub if (e.getSource() = jButton1) serverThread = new ServerThread();

10、serverThread.start(); else if (e.getSource() = jButton2) serverThread.finalize(); this.setVisible(false); / 主函数 public static void main(String agrs) Sever sever = new Sever(); sever.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 在该界面中,我们定义了两个按钮分别用于启动服务器和关闭服务器,还有一个文本框用于服务器端接受信息。至于这个界面,用java设计,应该不陌生吧

11、。 好了,今天就到这里,下节我们要讲,如何启动服务器。敬请关注,谢谢。 我们编写的服务器端程序一共包括四个类,其名称及功能如下:Server.java:服务器端主程序负责界面,以及服务端主程序ServerThread的启动,服务端主程序ServerThread又产生BroadCaset及ClientThread线程。BroadCast.java:服务器向客户端广播线程,负责向客户端发送消息。ClientThread.java:维持服务器与单个客户端的连接线程,负责接收客户端发来的信息。ServerThread.java:服务器监听端口线程,负责创建服务器端ServerSocket以及监听是否有

12、新客户端连接,并且记录客户端连接以及需要发送的信息。 上节我们设计好了启动和关闭服务器界面,这节我们主要来讲,如何启动和关闭服务器。当Server.java文件被运行时,首先执行main方法中的代码,创建一个Server类,生成了服务器端的界面,当单击界面上得“启动服务器”按钮时,回创建一个ServerThread对象,并执行该对象中run方法的代码,所以在这里我们通过ServerThread线程来启动和关闭服务器。下面,就来设计该类的实现。1、 首先看当单击启动服务器按钮后的界面运行效果,截图如下:从该界面中,我们可以看到,当我们单击“启动服务器”按钮时,文本框中回出现当前的本地连接IP地址

13、及我们设置的端口号。2、 实现效果代码如下: html view plaincopypackage com.wyf.wpf; import java.io.IOException; import .InetAddress; import .ServerSocket; import .Socket; import .UnknownHostException; import java.util.Vector; /*服务器监听端口线程*/ public class ServerThread extends Thread / 指定服务器监

14、听端口常量 private static final int PORT = 8521; / 声明ServerSocket类对象 ServerSocket serverSocket; /* * 创建一个Vector对象,用于存储客户端连接的ClientThread对象。 * ClientThread类维持服务器与单个客户端的连接线程,负责接收客 * 户端发来的信息,这里为什么使用Vector。因为Vector有自动排序递增功能 */ Vector clients; / 创建一个Vector对象,用于存储客户端发送过来的信息 Vector messages; / 声明BroadCast类,负责服务

15、器向客户端广播信息 BroadCast broadcast; / 声明两个变量,用于获取本地连接IP地址 String ip; InetAddress myIPAddress = null; public ServerThread() /* * 创建两个恶Vector数组非常重要。clients负责存储所有与服务器建立连接 * 的客户端。message负责存储服务器接收到的未发送出去的全部客户端的信息 */ clients = new Vector(); messages = new Vector(); try serverSocket = new ServerSocket(PORT); catch (IOException e) try myIPAddress =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论