没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
JAVA 编写 QQ 聊天系统指导书
一、 QQ 聊天系统简介
1、 模拟聊天系统包含两个方面,服务器端和客户端。
2、 服务器端任务:建立一个 ServerSocket,与客户端建立通信通道,不断侦听是否有客
户端连接或者断开连接。 服务器端是一个信息转发中心,所有客户端的信息都传到
服务器端,由服务器端根据要求分发信息。
3、 客户端任务:建立一个 Socket,与服务器端建立通信通道,向服务器端发送信息,并
接收来自服务器的信息。
二、 QQ 聊天系统测试
1 、教师机新建 一个 java project, 命名为 QQchat, 将“QQ 聊天系 统素材” 下服务器 端
解 压 , 将 解 压 后 的 两 个 包 com , client 复 制 到 QQchat/src 下 , 运 行
Server.java。弹出如图 1-1 所示图形界面,点击“开始”,将弹出如图 1-2 所示图形界面,服
务器即打开。
图 1-1 图 1-2
2、指导学生新建一个 java project,命名为 QQchat,在“QQ 聊天系统素材”下载客户端
,将客户端下载解压,将解压后的两个包 com,client 复制到 QQchat/src
下,运行 Client.java,将弹出如图 1-3 所示图形界面,输入服务器的 ip,port,以及帐户名
(自已姓名)登录,将弹出如图 1-4 所示图形界面。点击如图 1-5 所示图形界面的下拉列表,
在发送框中输入信息发送,就可以进行群聊或私聊。
1
图 1-3 图 1-4 图 1-5
4、 指导同学们下载服务器端,同学们轮流运行服务器程序,其它同学通过某个同学的
服务器程序进行聊天。不同的服务器以 IP 地址区别。需要提醒学生注意的是:只有
登录同一个服务器的客户端才能相互聊天,测试时服务器端只能有一个,学生们需
要轮流做服务器,而客户端可以有多个,没有限制。
三、 QQ 聊天系统设计与实现操作步骤。
任务一 目的:通过网络编程,让同学们与老师互通字节信息。老师做服务器,学生
做客户端。具体操作步骤:教师与学生都新建一个 java project,命名如 zhangsanQQchat(以
本人姓名+QQchat 为文件名),在 src 下新建一个 other 包,教师在 other 包下新建 Server.java
类并运行。指导学生在 other 包下新建 Client.java 类并运行,学生逐个与教师连接测试。通
过测试,教师检查学生完成情况并记录。
Server.java 代码如下:
package other;
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
ServerSocket server;
try {
server=new ServerSocket(1234);
Socket sk=server.accept();
InputStream is= sk.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 代码如下:
package other;
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
Socket client;
2
try {
client=new Socket("localhost",1234);
OutputStream os=client.getOutputStream();
os.write('z');
os.write('h');
os.write('a');
os.write('n');
os.write('s');
bw.close();
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
任务二 目的:通过网络编程,让同学们与老师互通字节信息。学生做服务器,老师
做 客 户端 。指 导 学生 在 other 包 下新 建 Server.java 类 并运 行 。教 师在 other 包 下 新建
Client.java 类并运行,逐个与学生连接测试,教师检查学生完成情况并记录。代码同上。
网络编程总结如下:
1、 在服务器端先定义一个 Server.java 类。①在此类中的 main 方法中,创建一个
ServerSocket 实例,指定打开一个端口,让其它机器访问。②此 ServerSocket 实例
调用方法 accept()来等待其它机器连接,若有连接返回一个 Socket 实例③ Socket 实
例可以调用 getInputStream()方法获取客户端发来的信息。④将这些信息输出,关
闭各种流及连接。
2、 在客户端定义一个 Client.java 类。①在此类中 main 方法中,通过对指定服务器端
的连接获取一个 Socket 实例②调用这个 Socket 实例的 getOutputStream()方法获取
一个输出流,通过输出流往服务器发送信息③关闭各种流及连接
3、 学生先跟老师通信,然后两个同学一组,互相做客户端与服务器端,理解网络编
程的基本知识。
4、 由于 没 有 引入 线 程 知 识, 在 做 服务 器 端 时, 每 连 接 一次 后 , 都要 重 新 运 行
Server.java。
任务三 目的:通过网络编程,让同学们与老师互通 字符信息。将 Server.java 与
Client.java 修改并运行。通过教师与学生互动测试,教师检查学生完成情况并记录。
Server.java 代码修改如下:
package other;
import java.io.*;
import java.net.*;
3
public class Server {
public static void main(String[] args) {
ServerSocket server;
try {
server=new ServerSocket(1234);
Socket sk=server.accept();
//返回一个字节输入流
InputStream is= sk.getInputStream();
//将字节流转化为字符流
InputStreamReader isr=new InputStreamReader(is);
//将字符流转化为缓存流
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 代码修改如下:
package other;
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
Socket 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.printStackTrace();
} catch (IOException e) {
4
e.printStackTrace();
}
}
}
任务总结:从上面的案例,在服务器端发现了一个缺点,每次只能与一个客户端连
接,连接成功后就会退出。如何解决问题,在服务器端加上线程。
任务四 目的:客户端代码不变,在服务器端加上线程,要求服务器能与多个客户端
联系。教师做服务器端,并启动服务器端,与多个同学连接,通过教师与学生互动测试,
教师检查学生完成情况并记录。
public class Server {
public static void main(String[] args) {
System.out.println("这是包含线程的服务器");
ConServerThread 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 run() {
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);
5
剩余33页未读,继续阅读
资源评论
- TF_TC2015-06-22比较清晰明了,但是中间衔接不够,理解起来比较困难
海宝就是海宝
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功