java 即时通信系统 指导书

上传人:第*** 文档编号:33576499 上传时间:2018-02-15 格式:DOC 页数:35 大小:776.85KB
返回 下载 相关 举报
java 即时通信系统  指导书_第1页
第1页 / 共35页
java 即时通信系统  指导书_第2页
第2页 / 共35页
java 即时通信系统  指导书_第3页
第3页 / 共35页
java 即时通信系统  指导书_第4页
第4页 / 共35页
java 即时通信系统  指导书_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《java 即时通信系统 指导书》由会员分享,可在线阅读,更多相关《java 即时通信系统 指导书(35页珍藏版)》请在金锄头文库上搜索。

1、1JAVA 编写即时通信系统指导书一、 即时通信系统简介1、 模拟聊天系统包含两个方面,服务器端和客户端。2、 服务器端任务:建立一个 ServerSocket,与客户端建立通信通道,不断侦听是否有客户端连接或者断开连接。 服务器端是一个信息转发中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。3、 客户端任务:建立一个 Socket,与服务器端建立通信通道,向服务器端发送信息,并接收来自服务器的信息。二、 即时通信系统测试1、服务器端运行 Server.java。弹出如图 1-1 所示图形界面,点击“开始” ,将弹出如图 1-2所示图形界面,服务器即打开。图 1-1 图 1-

2、22、客户端运行 Client.java,将弹出如图 1-3 所示图形界面,输入服务器的 ip,port,以及帐户名(自已姓名)登录,将弹出如图 1-4 所示图形界面。点击如图 1-5 所示图形界面的下拉列表,在发送框中输入信息发送,就可以进行群聊或私聊。图 1-3 图 1-4 图 1-5三、 即时通信系统设计与实现操作步骤。任务一(1) 目的:通过网络编程,让客户端与服务器端互通字节信息。老师做服务器,学生做客户端。具体操作步骤:教师与学生都新建一个 java project,命名如zhangsanQQchat(以本人姓名+QQchat 为文件名),在 src 下新建一个 other 包,教

3、师在 other包下新建 Server.java 类并运行。指导学生在 other 包下新建 Client.java 类并运行,学生逐个与教师连接测试。通过测试,教师检查学生完成情况并记录。2Server.java 代码如下:import java.io.*;import .*;public class Server public static void main(String args) ServerSocket server;try server = new ServerSocket(1234);Socket sk = server.accept();InputStream is = sk

4、.getInputStream();int i;System.out.println(这是服务器端接收到的信息 );while (i = is.read() != -1) System.out.print(char) i);server.close(); catch (IOException e) e.printStackTrace();Client.java 代码如下:import java.io.*;import .*;public class Client public static void main(String args) Socket client;try client=new

5、Socket(localhost,1234);OutputStream os=client.getOutputStream();os.write(z);os.write(h);os.write(a);os.write(n);os.write(s);os.close();client.close(); catch (UnknownHostException e) 3e.printStackTrace(); catch (IOException e) e.printStackTrace();任务二(2) 目的:通过网络编程,让同学们与老师互通字节信息。学生做服务器,老师做客户端。指导学生在 oth

6、er 包下新建 Server.java 类并运行。教师在 other 包下新建Client.java 类并运行,逐个与学生连接测试,教师检查学生完成情况并记录。代码同上。网络编程总结如下:1、 在服务器端先定义一个 Server.java 类。在此类中的 main 方法中,创建一个ServerSocket 实例,指定打开一个端口,让其它机器访问。此 ServerSocket 实例调用方法 accept()来等待其它机器连接,若有连接返回一个 Socket 实例Socket实例可以调用 getInputStream()方法获取客户端发来的信息。将这些信息输出,关闭各种流及连接。2、 在客户端定义

7、一个 Client.java 类。在此类中 main 方法中,通过对指定服务器端的连接获取一个 Socket 实例调用这个 Socket 实例的 getOutputStream()方法获取一个输出流,通过输出流往服务器发送信息关闭各种流及连接3、 学生先跟老师通信,然后两个同学一组,互相做客户端与服务器端,理解网络编程的基本知识。4、 由于没有引入线程知识,在做服务器端时,每连接一次后,都要重新运行Server.java。任务三 目的:通过网络编程,让同学们与老师互通字符信息。将 Server.java 与 Client.java 修改并运行。通过教师与学生互动测试,教师检查学生完成情况并记录

8、。Server.java 代码修改如下:import java.io.*;import .*;public class Server public static void main(String args) ServerSocket server;try server=new ServerSocket(1234);Socket sk=server.accept();/返回一个字节输入流InputStream is= sk.getInputStream();/将字节流转化为字符流4InputStreamReader isr=new InputStreamReader(is);/将字符流转化为缓存

9、流BufferedReader br=new BufferedReader(isr);String s=br.readLine();System.out.println(这是服务器端接收到的信息 );System.out.println(s);br.close();server.close(); catch (IOException e) e.printStackTrace();Client.java 代码修改如下:import java.io.*;import .*;public class Client public static void main(String args) Socket

10、 client;try client=new Socket(localhost,1234);/获取一个字节输出流OutputStream os=client.getOutputStream();/将字节输出流转化为字符输出流OutputStreamWriter osw=new OutputStreamWriter(os);/将字符输出流转化为缓存流BufferedWriter bw=new BufferedWriter(osw);bw.write(我是 张三,老师好);bw.close();client.close(); catch (UnknownHostException e) e.pri

11、ntStackTrace(); catch (IOException e) e.printStackTrace();任务总结:从上面的案例,在服务器端发现了一个缺点,每次只能与一个客户端连接,连接成功后就会退出。如何解决问题,在服务器端加上线程。5任务四(3) 目的:在服务器端加上线程,要求服务器能与多个客户端联系。教师做服务器端,并启动服务器端,与多个同学连接,通过教师与学生互动测试,教师检查学生完成情况并记录。public class Server public static void main(String args) System.out.println(这是包含线程的服务器);Con

12、ServerThread cst=new ConServerThread();cst.startServer();new Thread(cst).start();public class ConServerThread implements Runnable/这是包含线程的服务器ServerSocket serverSocket;int count=0;public void startServer()try serverSocket=new ServerSocket(8000); catch (IOException e) e.printStackTrace();public void ru

13、n() try while(true)Socket clientSocket=serverSocket.accept();InputStream ins=clientSocket.getInputStream();/*以下三行代码也可以接收字符流InputStreamReader isr=new InputStreamReader(ins);BufferedReader bfr=new BufferedReader(isr); String str= bfr.readLine();*/推荐使用下面方法接收字符DataInputStream dis=new DataInputStream(ins

14、);String str=dis.readUTF();System.out.println(这是从客户端传过来的信息: +str);count+;System.out.println(这是第+count+个连接客户);6 catch (IOException e) e.printStackTrace();客户端代码import java.io.BufferedWriter;import java.io.DataOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStre

15、amWriter;import .Socket;import .UnknownHostException;public class Client public static void main(String args) Socket client;try client=new Socket(localhost,8000);/获取一个字节输出流OutputStream os=client.getOutputStream();/将字节输出流转化为字符输出流OutputStreamWriter osw=new OutputStreamWriter(os);/将字符输出流转化为缓存流DataOutputStream dos=new DataOutputStream(os);/BufferedWriter bw=new BufferedWriter(osw);/bw.write(我是张三,老师好);dos.writeUTF(我是张三,老师好 );dos.close();/bw.close();client.close(); catch (UnknownHostException e) e.printStackTrace(); catch (IOEx

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号