java socket 路由_Java Socket编程题库

一、填空题

___IP地址____用来标志网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。

统一资源定位符URL是指向互联网“资源”的指针,由4部分组成:协议、存放资源的主机域名、__端口___和资源路径和文件名。

URL是统一资源定位器的简称,它表示Internet上某一资源的地址。

在Socket编程中,IP地址用来标志一台计算机,但是一台计算机上可能提供多种应用程序,使用端口来区分这些应用程序。

在Java Socket网络编程中,开发基于TCP协议的服务器端程序使用的套接字是ServerSocket。

在Java Socket网络编程中,开发基于UDP协议的程序使用的套接字是DatagramSocket。

二、选择题

1.

以下协议都属于TCP/IP协议栈,其中位于传输层的协议是(  AD)。(选择二项)

A

TCP

B.

HTTP

C.

SMTP

D.

UDP

2.

以下协议中属于TCP/IP协议栈中应用层协议的是(A)。(选择一项)

A

HTTP

B.

TCP

C.

UDP

D.

IP

3.

以下说法中关于UDP协议的说法正确的是(  AD)。(选择二项)

A.

发送不管对方是否准备好,接收方收到也不确认

B.

面向连接

C.

占用系统资源多、效率低

D.

非常简单的协议,可以广播发送

4.

在基于TCP网络通信模式中,客户与服务器程序的主要任务是(BC)。(选择二项)

A

客户程序在网络上找到一条到达服务器的路由

B.

客户程序发送请求,并接收服务器的响应

C.

服务器程序接收并处理客户请求,然后向客户发送响应结果

D.

如果客户程序和服务器都会保证发送的数据不会在传输途中丢失

5.

在Java网络编程中,使用客户端套接字Socket创建对象时,需要指定(A)。(选择一项)

A

服务器主机名称和端口

B.

服务器端口和文件

C.

服务器名称和文件

D.

服务器地址和文件

6.

ServerSocket的监听方法accept( )方法的返回值类型是(A)。(选择一项)

A.

Socket

B.

Void

C.

Object

D.

DatagramSocket

7.

Java UDP Socket编程主要用到的两个类是(BD)。(选择二项)

A

UDPSocket

B.

DatagramSocket

C.

UDPPacket

D.

DatagramPacket

8.

在使用UDP套接字通信时,常用(D)类把要发送的信息打包。(选择一项)

A

String

B.

DatagramSocket

C.

MulticastSocket

D.

DatagramPacket

三、判断题

Socket是传输层供给应用层的编程接口,是应用层与传输层之间的桥梁 。(  T  )

TCP/IP传输控制协议是Internet的主要协议,定义了计算机和外设进行通信的规则。TCP/IP网络参考模型包括七个层次:应用层、会话层、表示层、传输层、网络层、链路层和物理层。(  F  )

TCP协议一种面向连接的、可靠的、基于字节流的通信协议 。HTTP、FTP、TELNET、SMTP 都是基于TCP协议的应用层协议。(  T  )

UDP协议是一种面向无连接的、可靠的、基于字节流的传输层通信协议,该协议占用系统资源多、效率较低。(  F  )

四、简答题

TCP/IP协议栈中,TCP协议和UDP协议的联系和区别?

简述基于TCP的Socket编程的主要步骤。

提示:分别说明服务器端和客户端的编程步骤。

简述基于UDP的Socket编程的主要步骤。

提示:分别说明服务器端和客户端的编程步骤。

五、编码题

使用基于TCP的Java Socket编程,完成如下功能:

1)   要求从客户端录入几个字符,发送到服务器端。

2)   由服务器端将接收到的字符进行输出。

3)   服务器端向客户端发出“您的信息已收到”作为响应。

4)   客户端接收服务器端的响应信息。

提示:

服务器端:PrintWriter out =new PrintWriter(socket.getOutputStream(),true);

客户端:BufferedReader line=new BufferedReader(new InputStreamReader(System.in));

服务器端:

1 public classServer2 { //服务器端类

3 private ServerSocket ss; //声明ServerSocket对象

4 private Socket socket; //声明Socket对象

5 private BufferedReader in; //声明输入流对象BufferedReader

6 private PrintWriter out; //声明输出流对象

7 publicServer()8 {9 try

10 {11 //创建一个ServerSocket,指定等待端口

12 ss = new ServerSocket(10000);13 while (true)14 {15 //使用ServerSocket接收用户请求(处于监听状态)

16 socket = ss.accept(); //获得客户端的socket对象17 //创建输入流并读取信息

18 in = new BufferedReader(newInputStreamReader(socket19 .getInputStream()));20 String line =in.readLine();21 System.out.println("客户端说:" +line);22 //创建输出流并输出信息

23 out = new PrintWriter(socket.getOutputStream(), true);24 out.print("您的信息已接收!");25 //关闭流和socket

26 out.close();27 in.close();28 socket.close();29 }30 } catch(IOException e)31 {32 e.printStackTrace();33 out.println("出错了!");34 } //创建ServerSocket对象

35 }36 public static voidmain(String[] args)37 {//程序主入口38 //创建对象

39 newServer();40 }41 }

客户端:(3分)

1 public classClient2 { //声明客户端类

3 Socket socket; //声明Socket对象

4 BufferedReader in; //声明输入流对象

5 PrintWriter out; //声明输出流对象

6 publicClient()7 { //构造方法

8 try

9 {10 //创建Socket对象,用来发送请求

11 socket = new Socket(InetAddress.getLocalHost(), 10000);12 //创建字符缓冲区对象

13 BufferedReader line = new BufferedReader(newInputStreamReader(14 System.in));15 //创建输出流对象并输出

16 out = new PrintWriter(socket.getOutputStream(), true);17 out.println(line.readLine());18 //创建输入流对象

19 in = new BufferedReader(newInputStreamReader(socket20 .getInputStream()));21 System.out.println(in.readLine());22 //关闭流对象

23 out.close();24 in.close();25 } catch(Exception e)26 {27 e.printStackTrace();28 System.out.println("出错了!");29 }30 }31 public static voidmain(String[] args)32 {33 //创建对象

34 newClient();35 }36 }

2. 使用基于UDP的Java Socket编程,完成在线咨询功能:

1)   客户向咨询人员咨询。

2)   咨询人员给出回答。

3)   客户和咨询人员可以一直沟通,直到客户发送bye给咨询人员。

1 /**

2 *3 * 在线客服咨询人员4 *5 */

6 public classAskServer7 {8 public static voidmain(String[] args)9 {10 //创建DatagramSocket,发送接收数据都依赖他

11 DatagramSocket socket = null;12 try

13 {14 socket = new DatagramSocket(8888);15 Scanner input = newScanner(System.in);16 while (true)17 {18 //准备一个空的数据包,用来接收数据

19 byte[] buf = new byte[1024];20 DatagramPacket packet = newDatagramPacket(buf, buf.length);21 //接收数据使用空的数据包

22 socket.receive(packet);23 //输出信息

24 String info = new String(packet.getData(), 0, packet.getLength());25 System.out.println("客户端请求:" +info);26 //判断是否退出

27 if ("bye".equals(info))28 {29 break;30 }31 //发送数据

32 String result =input.nextLine();33 byte[] buf2 =result.getBytes();34 DatagramPacket packet2 = newDatagramPacket(buf2, buf2.length,35 packet.getAddress(), packet.getPort());36 socket.send(packet2);37 }38 } catch(SocketException e)39 {40 e.printStackTrace();41 } catch(IOException e)42 {43 e.printStackTrace();44 } finally

45 {46 //关闭socket

47 socket.close();48 }49 }50 }

1 /**

2 *3 * 在线客服客户4 *5 */

6 public classAskClient7 {8 public static voidmain(String[] args)9 {10 //创建DatagramSocket,发送接收数据都依赖他

11 DatagramSocket socket = null;12 try

13 {14 socket = new DatagramSocket(9999);15 Scanner input = newScanner(System.in);16 while (true)17 {18 //准备要发送的数据

19 String str = input.nextLine();//bye20 //使用数据包把数据封装起来

21 byte[] buf =str.getBytes();22 DatagramPacket packet = newDatagramPacket(buf, buf.length,23 InetAddress.getByName("192.168.1.252"), 8888);24 //发送数据包

25 socket.send(packet);26 //判断是否退出

27 if ("bye".equals(str))28 {29 break;30 }31 //接收数据

32 byte[] buf2 = new byte[1024];33 DatagramPacket packet2 = newDatagramPacket(buf2, buf2.length);34 socket.receive(packet2);35 System.out.println("服务器端反馈:"

36 + new String(packet2.getData(), 0, packet2.getLength()));37 }38 } catch(SocketException e)39 {40 e.printStackTrace();41 } catch(IOException e)42 {43 e.printStackTrace();44 } finally

45 {46 //关闭socket

47 socket.close();48 }49 }50 }

六、可选题

使用TCP网络编程完成用户登录功能:客户端输入用户名和密码,向服务器发出登录请求;服务器接收数据并进行判断,如果用户名和密码均是bjsxt,则登录成功,否则登录失败,返回相应响应信息;客户端接收响应信息并输出登录结果。

1)   用户User类已提供构造方法 public User(String username,String password)。

2)   客户端采用ObjectOutputStream发送封装了用户名和密码的User对象。

3)   服务器端和客户端的类名和方法声明如下所示。

public class LoginServer {

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

}

public class LoginClient {

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

}

1 public classLoginServer2 {3 public static void main(String[] args) throwsException4 {5 //1.创建一个ServerSocket,指定等待端口(1分)

6 ServerSocket serverSocket = new ServerSocket(8888);7 //2.使用ServerSocket接收用户请求(处于监听状态)(1分)

8 Socket socket =serverSocket.accept();9 //3.创建输入流和输出流(0.5分)

10 ObjectInputStream ois11 = newObjectInputStream(socket.getInputStream());12 DataOutputStream dos13 = newDataOutputStream(socket.getOutputStream());14 //4.接收用户数据并输出(0.5分)

15 User user =(User) ois.readObject();16 System.out.println("我是服务器,收到的信息是:" +user);17 //5.发送反馈信息(0.5分)

18 boolean flag = false;19 if ("bjsxt".equals(user.getUsername())20 && "bjsxt".equals(user.getPassword()))21 {22 flag = true;23 }24 dos.writeBoolean(flag);25 //6.关闭流和socket(0.5分)

26 ois.close();27 dos.close();28 socket.close();29 }30 }

1 public classLoginClient2 {3 public static void main(String[] args) throwsException4 {5 //1.创建Socket,用来发送请求(0.5分)

6 Socket socket7 = new Socket(InetAddress.getByName("127.0.0.1"), 8888);8 //2.创建输入流和输出流(0.5分)

9 DataInputStream dis10 = newDataInputStream(socket.getInputStream());11 ObjectOutputStream oos12 = newObjectOutputStream(socket.getOutputStream());13 //3.发送数据(1分)

14 Scanner input = newScanner(System.in);15 System.out.println("请输入用户名");16 String username =input.nextLine();17 System.out.println("请输入密码");18 String password =input.nextLine();19 User user = newUser(username, password);20 oos.writeObject(user);21 //4.接收反馈信息并输出(0.5分)

22 boolean flag =dis.readBoolean();23 if(flag)24 {25 System.out.println("登录成功");26 } else

27 {28 System.out.println("登录失败");29 }30 //5.关闭流和socket(0.5分)

31 dis.close();32 oos.close();33 socket.close();34 }35 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值