搜索引擎技术基础-多线程编程实验报告

  • 格式:doc
  • 大小:322.50 KB
  • 文档页数:8

下载文档原格式

  / 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

昆明理工大学信息工程与自动化学院学生实验报告

(2011 —2012 学年第 1 学期)

课程名称:搜索引擎技术基础开课实验室:信自楼445 2011年 11月 9日

一、实验目的

1、掌握Socket通信原理。

2、掌握并实现多线程编程技术

二、实验原理及基本技术路线图(方框原理图)

三、上机平台、环境

PC机,MyEclipse 7.5版本

四、实验方法、步骤

1、通过Socket通信实现客户端与服务器端的通信。

2、实现服务器端对客户端的多线程技术。

五、实验过程原始记录(数据、图表、计算等)

1、通过Socket通信实现客户端与服务器端的通信。

Socket通信分为ServerSocket和Socket两部分,ServerSocket类提供TCP连接服务,Socket类提供进行通信的Socket对象。

建立TCP连接的各个步骤:分别是:

●服务器创建一个ServerSocket对象,指定端口号,ServerSocket

对象等待客户端的连接请求。

●客户端创建一个Socket对象,指定主机地址和端口号,向服务端发

出连接请求。

●服务端接收到客户端的连接请求,建立一条TCP连接,再创建一个

Socket对象与客户端的Socket对象进行通信。

●当一方决定结束通信,向对方发送结束信息;另一方接收到结束信

息后,双方分别关闭各自的TCP连接。

●ServerSocket对象停止等待客户端的连接请求。

作为服务器首先构造一个提供TCP连接服务的ServerSocket对象,然后指定其端口号,如果接收到客户端的连接请求,则建立一条TCP连接,再创建一个Socket对象与客户端的Socket对象进行通信,然后将从文件中读入的数据传送给客户端。由于服务器需要一直等待连接,所以需要监听端口请求。

源程序:

(1)服务器端 EchoServer.java

package test1;

import .* ;

public class EchoServer implements Runnable{

public static void main(String args[]) throws Exception {

// 所有异常抛出ServerSocket server = null ; // 定义ServerSocket类

Socket client = null ; // 表示客户端

server = new ServerSocket(8888) ; // 服务器在8888端口上监听

boolean f = true ; // 定义个标记位

while(f){

System.out.println("服务器已经运行,等待客户端连接。") ;

client = server.accept() ; // 得到连接,程序进入到阻塞状态

EchoThread thread=new EchoThread(client);

Thread echothread=new Thread(thread,"thread");

echothread.start();

}

client.close() ;

}

@Override

public void run() {

}

}

(2)客户端 EchoClient.java

import .* ;

import java.io.* ;

public class EchoClient{

public static void main(String args[]) throws Exception {

// 所有异常抛出Socket client = null ; // 表示客户端

client = new Socket("localhost",8888) ;

BufferedReader buf = null ; // 一次性接收完成

PrintStream out = null ; // 发送数据

BufferedReader input = null ; // 接收键盘数据

input = new BufferedReader(new

InputStreamReader(System.in)) ;

buf = new BufferedReader(new

InputStreamReader(client.getInputStream())) ;

out = new PrintStream(client.getOutputStream()) ;

boolean flag = true ; // 定义标志位

while(flag){

System.out.print("欢迎登陆:") ;

String str = input.readLine() ; // 接收键盘的输入信息

out.println(str) ;

}

buf.close() ;

client.close() ;

}

}

截图:

(1)开启服务器端等待客户端的连接:

(2)客户端通过8888端口与服务器端建立连接:

(3)客户端输入欲打开的文件名服务器端的响应:

(4)客户端接收到从服务器端发送来的文件内容: