logo资料库

socket编程实验报告.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
实验一 Socket 编程 班级:电子商务 08-2 班 学号:20085154 姓名:杨阳 一、目的 通过 socket 程序的编写、调试,掌握 socket 编程的基本方法,促进学生对 概念的理解,培养动手能力。 二、基本要求 编写并调试教学中使用的 socket 程序示例,并加以修改,增加程序的功能。 完成实验后,需要按时提交实验报告。 三、实验内容 服务器端程序代码: import java.io.*; import java.net.*; public class Socketserver { public static void main(String args[]) { Socket soc=null; InputStream is=null; OutputStream os=null; ServerSocket servSocket=null; try{ servSocket=new ServerSocket(8000);// 调用 ServerSocket 类的构造方法, 以 8000 端口号为参数,创建一个 ServerSocket 对象
soc=servSocket.accept();//服务程序使用 ServerSocket 对象的 accept( )方法 接收来自客户程序的请求。直到接收到从客户程序发来的连接请求(否则一直等 待),然后该方法返回一个新建的 Socket 类的对象 is=soc.getInputStream();//返回对 socket 的输入流的引用 os=soc.getOutputStream();//返回对 socket 的输出流的引用 BufferedReader in=new BufferedReader(new InputStreamReader(is));// 通过 InputStreamReader 的对象 is 的读取,将值赋给 in,基于字符流 PrintWriter out=new BufferedWriter(new OutputStreamWriter(os)),true);//通过 BufferedWriter 方法封装了 os,将值赋给 out, 其方法取参数 ture 表示当读取数据时,即自动刷新缓存区,当该参数取 flash 时, PrintWriter(new 只有当缓存区满时,才会刷新缓存区 System.out.println("client'sIP:"+soc.getInetAddress());//getInetAddress() 方法可以获得客户机的 IP 地址; System.out.println()表示向本地计算机反映相关 信息 得端口号 System.out.println("client's port"+soc.getPort());//getPort() 方 法 可 以 获 out.println("welcome!");//该方法表示向客户端输出相关数据 String s=in.readLine();//读取一行数据 while(!s.equalsIgnoreCase("quit"))//当客户端的数据不为 quit 时 { System.out.println("client said:"+s); s=in.readLine(); } System.out.println("client wants to leave."); }catch(Exception e) { System.err.println("socket wrong connetion");//输出错误信息 e.printStackTrace();//出现异常时,打印整个方法调用名单
}finally{//finally 方法释放资源 try { is.close();//关闭输入流 os.close();//关闭输出流 soc.close();//关闭 Socket servSocket.close();//关闭 ServerSocker System.out.println("over,successfully leasing resouce"); }catch(Exception e) { System.err.println("close socket wrong");//输出错误信息 e.printStackTrace();//出现异常时,打印整个方法调用名单 } } } } 客户端程序代码: import java.io.*; import java.net.*; public class Socketclient { public static void main(String args[]) { Socket soc=null; InputStream is=null; OutputStream os=null; try {
soc=new Socket("localhost",8000); System.out.println("connecting to the server"); is=soc.getInputStream(); os=soc.getOutputStream(); BufferedReader in=new BufferedReader(new InputStreamReader(is)); PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(os)),true); String s=in.readLine(); System.out.println("server said:"+s); System.out.println("server's IP:"+soc.getInetAddress()); System.out.println("server's Port"+soc.getPort()); /*byte b[]=new byte[100]; System.in.read(b); String ms=new String(b);*/ BufferedReader in2=new BufferedReader(new InputStreamReader(System.in));//定义变量 in2 获取服务器端信息 String ms=in2.readLine();//定义变量 ms 获取信息 ms=ms.trim(); while(!ms.equalsIgnoreCase("quit")) { out.println(ms); ms=in2.readLine(); ms=ms.trim(); }
out.println(ms); }catch(Exception e) { System.err.println("socket error"); e.printStackTrace(); }finally{ try { is.close(); os.close(); soc.close(); System.out.println("over,leasing resource successfully"); }catch(Exception e) { System.err.println("close socket wrong"); e.printStackTrace(); } } } } 服务器端程序的编写 1 调用 ServerSocket 类的构造方法,以某端口号为参数,创建一个 ServerSocket 对象。 2 服务程序使用 ServerSocket 对象的 accept( )方法接收来自客户程序的请求。 3 获取输入输出流对象,使服务器能够通过输入输出流与客户机交互。 4 使用 I/O 处理的方法完成和客户方的数据传输,处理客户方的数据,并将 结果返回给客户方。 5 客户方工作完毕,服务程序通过调用流和 socket 的 close( )方法关闭流和连 接。
客户端程序的编写 1 创建一个 Socket,实现与服务器的连接。 2 客户使用 Socket 类提供的方法 getInputStream( )和 getOutputStream( )获得对 输入输出流的引用。 3 处理阶段,通过获得的输入输出流对象进行通信。 4 调用流和 Socket 的 close( )方法关闭流和连接。 四、实验中遇到的问题和解决方案 1、变量名取错了 2、/*byte b[]=new byte[100]; System.in.read(b); String ms=new String(b);*/ 3、程序运行顺序 Socket 编程基础  在网络编程时,需要产生一个 socket 来建立与另一台机器的连接。然后就 可以从 socket 获得 InputStream 和 OutputStream 对象,这样就能够用输入 输出流对象来进行数据处理。  一个连线对应于两个 socket 对象。  有两种 socket 类:ServerSocket 用来让服务器监听连线;Socket 用来让客 户端建立连线。  当客户端建立连线后,ServerSocket 就会通过 accept( )方法返回对应的 Socket,通过返回的 Socket 就可以开始通信。这样便有一条 socket 对 socket 的连线。可以使用 getInputSream( )和 getOutputStream( )方法从两个 socket 获得相应的 InputStream 和 OutputStream 对象,然后可以对其进行处理, 就象通常的文件处理一样。  ServerSocket 的主要作用是等待客户机连接上来,然后返回一个 Socket。  生成 ServerSocket 对象时只需指定 port,因为它已经位于运行服务程序的 机器上了。在产生 Socket 对象时,必须同时指定 IP 地址和 port(服务程 序所对应的端口号)。
(2)根据所要实现的功能,编写 socket 服务器端程序、客户端程序;要清 楚服务器端和客户端之间如何建立连接、任何传输数据。 (3)编译程序,修改 JDK 或 IDE 提示的错误,直到编译时无错误出现。 (4)首先运行服务器端程序,等待客户机的连接;然后运行客户端程序, 实现服务器、客户机之间的通信。如运行程序时出错,根据提示的错误修改源程 序,直到能够正确运行。 五、设备或工具使用说明 软件要求:Windows 操作系统,JDK 1.4 或以上版本,JCREATOR 或记事本 编辑器。 软件具体用法参见课堂教学。 六、注意事项 要注意服务器端程序、客户端程序的运行先后次序,不能颠倒。另外上机调 试程序时需要记录遇到的问题及解决方法,以作为书写报告的素材。 七、思考题 如何实现实现服务器、客户机之间的交互?也就是说服务器、客户机不光可 以接受对方的数据,还可以根据对方发送来的数据给予回复。
分享到:
收藏