Socket端到端的通信.doc
文本预览下载声明
客户端与客户端之间的通信系统设计与实现
学号
姓名_ _
所在学院
学科、专业_ _
考试科目 _
考试日期 _ _
课程学时
考 试 形 式 _____ ______
评语:
客户端与客户端之间的通信系统设计与实现
一.功能描述:
在客户端/服务器/客户端模式中,基于Socket通信要实现信息共享,即服务器可以向其他多个客户端发送广播消息,客户端通过服务器也可以向其他客户端彼此收发送消息。类似于聊天室的那种功能,实现信息能在多个客户端之间共享。
客
户
端
服
务
器
客
户
端
客
户
端
链接
链接
转发
链接
转发
客户端先与服务器建立连接,服务器接收客户端的消息,再转发给其他的客户端,转发之前客户端都必须先与服务器建立连接才可以,每个客户端之间通过服务器间接通信,从而实现客户端彼此间的通信。
二.设计思路:
客户端循环可以不停输入向服务器发送消息,并且启一个线程,专门用来监听服务器端发来的消息并打印输出。服务器端启动时,启动一个监听何时需要向客户端发送消息的线程。
每次接受客户端连接请求,都启一个线程进行处理,并且将客户端信息存放到公共集合中。当客户端发送消息时,服务器端将消息顺序存入队列中,当需要输出时,从队列中取出广播到各客户端处。
客户端输入showuser命令可以查看在线用户列表,查看到每个客户端名,输入bye向服务器端申请退出连接。
创建服务端Socket,创建向客户端发送消息线程,监听客户端请求并处理。
监听是否有输出消息请求线程类,向客户端发送消息。
将缓存在队列中的消息按顺序发送到各客户端,并从队列中清除。
创建客户端,与服务器连接,并输入发送消息,
用于监听服务器端向客户端发送消息线程。
网络程序是建立在TCP/IP协议的基础上,致力于应用层,传输层向应用层提供了套接字Socket接口,Socket封装了下层的数据传输细节,应用层的程序通过Socket来建立与远程主机的连接以及进行数据传输。
两个进程之间通信过程是从建立连接开始的,接着交换数据,到断开连接结束,套接字可看做是通信线路两端的收发器,进程通过套接字来收发数据。
进程1
Socket
Soket
进程2
TCP连接
套接字可以看做通信连接两端的收发器
三.代码行编辑,行注释:
服务器端:
//创建服务端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Server extends ServerSocket{
private static final int SERVER_PORT =2014; //定义个端口号
private static boolean isPrint =false;//是否输出消息标志
private static List user_list =new ArrayList();//登录用户集合
private static ListServerThread thread_list =new ArrayListServerThread();//服务器已启用线程集合
private static LinkedListString message_list =new LinkedListString();//存放消息队列
//创建服务端Socket,创建向客户端发送消息线程,监听客户端请求并处理
public Server()throws IOException{
super(SERVER_PORT); //创建ServerSocket
new PrintOutThread(); //创建向客户端发送消息线程
try {
while(true){ //监听客户端请求,启个线程处理
Socket socket
显示全部