实验报告
实验一 Socket编程
一、实验目的
通过socket程序的编写、调试,掌握socket编程的基本方法,了解客户端与服务器端的特点,掌握并熟悉运用socket类与ServerSocket类。
二、实验内容
①学习socket编程使用的类和接口,着重掌握基于TCP协议的socket。 ②编写服务器端的应用程序 ③编写客户端的应用程序 ④实现服务器端与客户端的交互
三、实验代码
1.服务器端程序
过程:在端口5000上创建一个等待连接的ServerSocket对象server:server=new ServerSocket(5000);接着调用server对象的accept()方法等待某客户程序发出连接请求。该方法一直阻塞直到有客户连接到带端口。一旦有客户发送正确请求,则连接成功,accept()方法返回一个Socket对象,于是得到了一个新的用于通信的Socket对象,通信链路建立成功。然后利用Socket类提供的方法创建Socket对象的输入流和输出流。此后即于客户端进行通信,直到客户端断开连接即关闭各个流结束通信。
精品资料
______________________________________________________________________________________________________________
代码如下: import java.net.*; import java.io.*; class aa { static public void main (String args[]) throws IOException { ServerSocket server=null; Socket socket=null; InputStream is=null; OutputStream os=null; DataInputStream in=null; PrintStream out=null; try
{ //在端口5000注册服务 server=new ServerSocket(5000);
socket =server.accept();//侦听连接请求,等待连接
System.out.println(\"**********************
服
务
器
*************************\"); System.out.println(\"与客户端连接成功!\"); System.out.println(\"\");
System.out.println(\"对话内容为:\");
精品资料
端
界
面
______________________________________________________________________________________________________________
System.out.println(\"\");
System.out.println(\"等待客户发送信息.....\");
//获取对应的Socket的输入/输出流
is=socket.getInputStream();
os=socket.getOutputStream(); //建立数据流
in= new DataInputStream(is);
out =new PrintStream(os);//表示向对方输出
out.println(\"Welcome!\");//表示向对方输出
String str=in.readLine();//逐行读取 do {
System.out.println(\"客户端说:\"+ str); str=in.readLine();
}while(str.trim().equals(\"BYE\")) //如果是“BYE”就退出 System.out.println(\"客户想要离开\"); }
catch(Exception e) //捕获程序异常 {
System.out.println(\"Error:\"+e); } finally
精品资料
______________________________________________________________________________________________________________
} }
{
is.close();//关闭输入流 os.close();//关闭输出流 in.close();//关闭数据输入流 socket.close();//关闭socket }
2.客户端程序
过程:首先创建一个指向服务器的指定端口号(5000)的Socket对象socket:socket=new Socket(\"localhost\此时服务器指定为本地计算机,若要在网络中指定服务器,只需要将参数localhost改成相应的服务器名或者IP地址即可。 然后程序利用Socket类提供的方法创建Socket对象的输入流和输出流。此后即于服务器通信,断开连接即关闭各个流结束通信。 代码如下: import java.net.*; import java.io.*; class bb {
static public void main (String args[]) throws IOException {
Socket socket=null;
精品资料
______________________________________________________________________________________________________________
InputStream is=null; OutputStream os=null; DataInputStream in=null; PrintStream out=null; String d=null; try
{ //向本地服务器申请链接
//注意端口号要与服务器保持一致:5000
socket=new Socket(\"localhost\
System.out.println(\"********************客户端界面
************************\");
System.out.println(\"与服务器连接成功!\"); System.out.println(\"\");
System.out.println(\"对话内容为:\"); System.out.println(\"\");
System.out.println(\"请输入信息:\");
//获取对应的Socket的输入/输出流
is=socket.getInputStream(); os=socket.getOutputStream();
//建立数据流
in= new DataInputStream(is); out=new PrintStream(os);
精品资料
______________________________________________________________________________________________________________
d=in.readLine();
System.out.println(\"服务器说:\"+d); byte a[]=new byte[100]; System.in.read(a); String b=new String(a,0);
b=b.trim();//去点输入的第一个字符前的空格 while(!b.equals(\"BYE\")) {
out.println(\"请输入您要发送的信息:\"+b);//如果输入的不是“BYE,”
就向对方输出
System.in.read(a); b=new String(a,0); b=b.trim(); }
out.println(b); }
catch(Exception e)//捕获程序异常 {
System.out.println(\"Error:\"+e); } finally {
精品资料
______________________________________________________________________________________________________________
} }
is.close();//关闭输入流 os.close();//关闭输出流 socket.close();//关闭socket }
四、程序运行过程
1.运行客户端程序,当客户端程序运行后,服务器端立即显示连接成功并等待客户端发送信息,结果如下图.
服务器程序的运行结果
客户端程序运行后的结果
2.客户端向服务器端发送信息,如客户端发送信息“1234567”,服务器端显示客户端发来
精品资料
______________________________________________________________________________________________________________
的信息,运行结果如下图。
3.当客户端向服务器端发送信息“BYE”时,即关闭连接,如下图所示。
精品资料
______________________________________________________________________________________________________________
五、实验心得
首先我把类aa申明成为public类型,运行出现以下问题:类bb是公共的,应在名为bb.java的文件中申明。经过java书籍知:没有包的类不能被申明为public。
服务器端的端口号必须与客户端的端口号一致。若不一致,会提示“java.net.ConnectException: Connection refused: connect”;但是服务器端获取的不一定就是客户端的端口号,服务器端会在任意一个空闲的端口创建socket对象,与客户端连接;而客户端获取的端口号即为服务器提供的端口号.
端口号的选择一定要在1024以上,我先试图在100端口建立连接,运行程序时抛出BindException异常,即端口已被绑定。选择1024以上就是怕出现BindException异常,当并不是10245以下所有端口号都被绑定了。
在实验过程中,我巩固了以前基础的java知识。初步熟悉并掌握了try-catch-finally的结构,学习了解异常处理的作用。了解Socket类与ServerSocket类的作用与用法,会用一些Socket类与ServerSocket类的重要方法。并且初步了解java中用来实现客户端TCP操作Socket类,这个类本身使用直接代码通过主机操作系统的本地TCP栈进行通信。
精品资料
______________________________________________________________________________________________________________
精品资料
______________________________________________________________________________________________________________
Welcome To Download !!!
欢迎您的下载,资料仅供参考!
精品资料
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务