今天,我们来讲Android聊天室实例开发项目,通过此项目来帮助我们了解Socket网络编程,希望对大家有所帮助。开发之前,我们有必要了解下一些基本知识如下:
1、 服务器端ServerSocket:它常用的构造函数是ServerSocket(int port),该构造函数创建的ServerSock对象可以将这个ServerSocket绑定到一个指定的端口上,通过该程序所在计算机的IP地址以及这个端口号,客户端Socket才能连接该ServerSocket。
2、 客户端Socket:它常用的简单构造函数是Socket(String host,int port),该构造函数根据两个参数连接指定的主机地址和端口号上运行的服务器程序。
注意:
在创建Socket时如果发生错误,将产生IOException,在程序中必须对之进行处理。所以在创建Socket或ServerSocket时,必须捕获或抛出异常。
Socket常用的方法还有以下几种:
(1)、getInputStream():返回套接字的输入流,通过得到的输入流可以获取信息。
(2)、getOutputStream():返回此套接字的输出流,通过得到的输出流可以输出信息。
关闭Socket的方法:
每一个Socket存在时,都讲占用一定的资源,在Socket对象使用完毕时,将其关闭。关闭Socket可以调用Socket的Close()方法。在关闭Socket之前,应将与Socket相关的所有的输入/输出流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与Socket相关的所有的输入/输出流该首先关闭,然后再关闭Socket。
Socket通信的一般过程:
(1)、服务器端程序创建一个ServerSocket,然后调用accept()方法等待客户连接。
(2)、客户端程序创建一个Socket并请求与服务器程序建立连接。
(3)、服务器端程序接受客户端的连接请求,并创建一个新的Socket与该客户建立专线连接。
(4)、建立了连接的客户端及服务端的两个Socket在一个由服务器端程序创建的单独的线程上对话,对话的方式采用getInputStream()、getOutputStream()得到的输入与输出流进行读取与输出。
(5)、服务器端开始等待新的连接请求,重复(2)~(5)的过程。
好了,我们有了上面的基础之后之后,我们就开始我们的Socket聊天室编程之旅吧。
首先,我们要了解下,我们这个项目的整天框架,聊天室主要包括两部分:1、服务器端。2、客户端;对于服务器端,我们在PC上采用纯java设计图形界面,而客户端主要是手机客户端。下面我们就开始编写服务器端界面设计程序。
1、 新建一个Java项目,命名为PCChat,在该项目中,新建一个java类,命名为Server.java,这就是PC服务器端的主界面。
2、 主界面截图如下:
3、 主界面代码如下:
package 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; import 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(); JButton jButton2 = new JButton(); JScrollPane jScrollPane1 = new JScrollPane(); // 创建服务器端接受消息文本框 static JTextArea jTextArea = new JTextArea(); // 声明ServerThread线程类对象 ServerThread serverThread; // 构造函数,用于初始化面板 public Sever() { getContentPane().setLayout(borderLayout1); jButton1.setText("启动服务器"); jButton1.addActionListener(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.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(); 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设计,应该不陌生吧。
好了,今天就到这里,下节我们要讲,如何启动服务器。敬请关注,谢谢。