实现一个一对多聊天程序.doc
文本预览下载声明
、
实现一个一对多的聊天程序
一、实验题目
实现一个一对多的聊天程序。其基本过程如下:服务器首先启动,创建套接字后等待客户的连接;客户启动以后,创建套接字,然后和服务器建立连接;连接建立后,客户机和服务器可以通过建立的套接字连接进行通信。服务器和客户端可以是一台电脑上的两个进程,也可以分别部署在两台电脑上。
二、原理概述
TCP是一种可靠的、基于连接的网络传输协议,当两个网络进程准备进行通信时,都必须首先建立各自的一个套接口,其中服务器建立套接口后,侦听来自网络的客户连接请求,客户通过套接口,指定服务器的IP 地址和端口号,便可与服务器通信。
聊天程序采用的是C/S通信模式,即客户/服务模式,它把一个应用划分成功能不同的两个部分,分别在不同的计算机上运行,其中一个为服务端程序,用来响应和提供固定的服务,一个为客户端程序,用来向服务端提出请求和要求某种服务。在数量关系上,通常有一对多的(即一个服务端程序和一个客户端程序之间通信)。
客户机/服务器模式在操作过程中采取的是主动请示方式:
首先服务器方要先启动,并根据请示提供相应服务:
(1)打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。
(2)等待客户请求到达该端口。
(3)接收到重复服务请求,处理该请求并发送应答信号。
(4)返回第二步,等待另一客户请求
(5)关闭服务器。
客户方:
(1)打开一通信通道,并连接到服务器所在主机的特定端口。
(2)向服务器发送服务请求报文,等待并接收应答;继续提出请求……
(3)请求结束后关闭通信通道并终止。
图1基于连接的服务者、客户服务流程图
三、设计方案
服务程序运行在服务器主机的某个端口上,一旦启动服务,它将在这个端口上倾听,等待客户程序发来的请求。服务器的套接口用服务器套接口类(ServerSocket)来建立。
1、根据程序设计题目时首先明确程序的目的以及任务
2、利用JAVA语言编写程序,使用套接字来完成测试功能。
3、程序在Eclipcse环境中编译,根据错误提示查找分析并修改原程序
四、程序编写:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
/**?
?* @Title 服务器
?* @author Allen
?* @version 2010-5-3 下午08:28:36
?*/
public class Server {
ServerSocket server = null;
ListSC clients = new ArrayListSC();
SimpleDateFormat sdf = new SimpleDateFormat(MM-dd HH:mm:ss);
public void begin(){
//读取客户端的userName
BufferedReader bufUserName = null;
boolean started = false;
String userName = null;
try {
server = new ServerSocket(8888);
System.out.println(服务器启动成功! ?端口 + server.getLocalPort() + 监听中...);
started = true;
while(started){
Socket socket = server.accept();
bufUserName = new BufferedReader(new InputStreamReader(socket.getInputStream()));
userName = bufUserName.readLine();
System.out.println(用户: + userName + ?IP: + socket.getLocalSocketAddress() + ? client connect...);
//bufUserName.close();
SC sc = new SC(socket);
new Thread(sc).start();
clients.add(sc);
}
} c
显示全部