2、等待客户请求到达该端口。
3、接收到重复服务请求,处理该请求并发送应答信号。 4、返回第二步,等待另一客户请求 5、关闭服务器。 客户方:
1、打开一通信通道,并连接到服务器所在主机的特定端口。
2、向服务器发送服务请求报文,等待并接收应答;继续提出请求…… 3、请求结束后关闭通信通道并终止。
3.3基本套接字
基于Eclipse编程环境,实现一个局域网环境下的文件的广播以及接收系统: 一行一行读取文件然后广播,同一子网掩码下的的用户都可以接收并查看。
1、创建套接字——socket()
功能:使用前创建一个新的套接字
格式:SOCKET PASCAL FAR socket(int af,int type,int procotol); 参数:af: 通信发生的区域 type: 要建立的套接字类型 procotol: 使用的特定协议 2、指定本地地址——bind()
功能:将套接字地址与所创建的套接字号联系起来。
格式:int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen);
参数:s: 是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。
其它:没有错误,bind()返回0,否则SOCKET_ERROR 地址结构说明: struct sockaddr_in {
short sin_family;//AF_INET
u_short sin_port;//16位端口号,网络字节顺序 struct in_addr sin_addr;//32位IP地址,网络字节顺序 char sin_zero[8];//保留 }
3、建立套接字连接——connect()和accept()
功能:共同完成连接工作
格式:int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen);
SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR * name,int FAR * addrlen); 参数:同上
4、监听连接——listen()
功能:用于面向连接服务器,表明它愿意接收连接。
基于Eclipse编程环境,实现一个局域网环境下的文件的广播以及接收系统: 一行一行读取文件然后广播,同一子网掩码下的的用户都可以接收并查看。
5、数据传输——send()与recv()
功能:数据的发送与接收
格式:int PASCAL FAR send(SOCKET s,const char FAR * buf,int len,int flags);
int PASCAL FAR recv(SOCKET s,const char FAR * buf,int len,int flags); 参数:buf:指向存有传输数据的缓冲区的指针。 6、多路复用——select()
功能:用来检测一个或多个套接字状态。
格式:int PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds,
fd_set FAR * exceptfds,const struct timeval FAR * timeout); 参数:readfds:指向要做读检测的指针 writefds:指向要做写检测的指针 exceptfds:指向要检测是否出错的指针 timeout:最大等待时间 7、关闭套接字——closesocket()
功能:关闭套接字s
格式:BOOL PASCAL FAR closesocket(SOCKET s);
4 系统设计
4.1 设计思想
整个系统分为广播发送端和接收端,发送端发送数据信息到多播组。接受端可以选择接收与不接收,服务器端是信息的中心。
服务器端可以打开指定的文件,通过定时器不断发送信息,同时可以自己显示正在发送和已发送的信息。客户端则可以选择接收和停止接收,同时显示接收到的内容。
本课程设计按照系统的具体功能要求,首先应用Socket编程创建客户端和服务器端,每个接收端就会相应的创建一个线程,它们之间通过这个连接来实现数据通信;然后在发送端和接收端设置一个监听器,用于监听发出的消息。并根据消息做出不同的动作。
基于Eclipse编程环境,实现一个局域网环境下的文件的广播以及接收系统: 一行一行读取文件然后广播,同一子网掩码下的的用户都可以接收并查看。
4.2系统功能
该系统实现了局域网内部的信息广播,,同一子网掩码下的用户都可以接收并查看 发送端发送的信息。发送端可以开始发送和停止发送,接收端也可以接收和停止接收,两端都可以显示发送的信息。
4.3系统架构
(1)选择用户数据报协议UDP,使用Java的Socket编程机制,分别建立发送端与接收端,自己可以设定主机的地址。
(2)分别设计发送端与接收器端的界面,并使用Java应用程序用户界面的开发工具包Swing进行窗体界面的布局,以及实现部分窗口事件的相应。
4.4 模块设计
(1) 广播发送端:
主要实现向各个接收端发布广播消息。 1、选择要发送的文件:
可以选择路径。
2、发送信息:运用MulticastSocket多播数据报套接字类用于发送和接收 IP 多播包。设置Timer计时器在指定时间间隔触发一个或多个 ActionEvent。
3、显示消息:显示发送的内容和已发送的内容。主要用BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流用来每次显示一行正发送的内容。显示已发送的内容则要使用append(String str) 将给定文本追加到文本区的当前文本。 (2) 客户端:
主要实现接收发送端发送的消息,和发送端一样可以显示已接收的信息内容。和接
受端得一个重要的区别在于它不需要打开一个文件,代码要简单一点。
5详细设计与实现
5.1 服务器端
(1)这部分代码包含的包有:
import java.io.*;
基于Eclipse编程环境,实现一个局域网环境下的文件的广播以及接收系统: 一行一行读取文件然后广播,同一子网掩码下的的用户都可以接收并查看。
import java.awt.event.*; import javax.swing.Timer; (2)界面设计
该段功能由ServerFrame.java文件中的ServerFrame类实现,具体实现过程如下: 窗口布局:服务器端窗口使用了BorderLayout事务管理器,把整个容器分成了几个区域,每个面板又分别使用不同的事务管理器放置其他组件,如按钮、标签、文本框等,各个组将构成了一个完整的服务器端界面。
下面图5-1是发送端初始化界面的截图:
图5-1发送端初始化界面
(3)事件处理:
通过Java的授权事件模型,针对组件“选择要广播的文件”、“开始广播”“停止广播”Button1~Button8,通过addActionListener(主要运用了addActionListener)方法注册监听器,并且实现ActionListener接口中的actionPerformed方法,这样,当组件触发了相应类型的事件后,此事件就会被传送给已注册的监听器,事件监听器负责处理事件。至此,实现了窗口对以下几个事件的响应:打开文件,开始发送信息、停止发送信息。