1、 填空题编程
2、 选择题服务器
1.网络 |
如下协议都属于TCP/IP协议栈,其中位于传输层的协议是( AD )。(选择二项)socket |
|
|
|
|
|
A编码 |
TCPspa |
|
B.指针 |
HTTPcode |
|
C.server |
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 |
3、 判断题
4、 简答题
提示:分别说明服务器端和客户端的编程步骤。
提示:分别说明服务器端和客户端的编程步骤。
5、 编码题
1) 要求从客户端录入几个字符,发送到服务器端。
2) 由服务器端将接收到的字符进行输出。
3) 服务器端向客户端发出“您的信息已收到”做为响应。
4) 客户端接收服务器端的响应信息。
提示:
服务器端:PrintWriter out =new PrintWriter(socket.getOutputStream(),true);
客户端:BufferedReader line=new BufferedReader(new InputStreamReader(System.in));
服务器端:
1 public class Server 2 { // 服务器端类
3 private ServerSocket ss; // 声明ServerSocket对象
4 private Socket socket; // 声明Socket对象
5 private BufferedReader in; // 声明输入流对象BufferedReader
6 private PrintWriter out; // 声明输出流对象
7 public Server() 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(new InputStreamReader(socket 19 .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 void main(String[] args) 37 {// 程序主入口 38 // 建立对象
39 new Server(); 40 } 41 }
客户端:(3分)
1 public class Client 2 { // 声明客户端类
3 Socket socket; // 声明Socket对象
4 BufferedReader in; // 声明输入流对象
5 PrintWriter out; // 声明输出流对象
6 public Client() 7 { // 构造方法
8 try
9 { 10 // 建立Socket对象,用来发送请求
11 socket = new Socket(InetAddress.getLocalHost(), 10000); 12 // 建立字符缓冲区对象
13 BufferedReader line = new BufferedReader(new InputStreamReader( 14 System.in)); 15 // 建立输出流对象并输出
16 out = new PrintWriter(socket.getOutputStream(), true); 17 out.println(line.readLine()); 18 // 建立输入流对象
19 in = new BufferedReader(new InputStreamReader(socket 20 .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 void main(String[] args) 32 { 33 // 建立对象
34 new Client(); 35 } 36 }
2. 使用基于UDP的Java Socket编程,完成在线咨询功能:
1) 客户向咨询人员咨询。
2) 咨询人员给出回答。
3) 客户和咨询人员能够一直沟通,直到客户发送bye给咨询人员。
1 /**
2 * 3 * 在线客服咨询人员 4 * 5 */
6 public class AskServer 7 { 8 public static void main(String[] args) 9 { 10 //建立DatagramSocket,发送接收数据都依赖他
11 DatagramSocket socket = null; 12 try
13 { 14 socket = new DatagramSocket(8888); 15 Scanner input = new Scanner(System.in); 16 while (true) 17 { 18 //准备一个空的数据包,用来接收数据
19 byte[] buf = new byte[1024]; 20 DatagramPacket packet = new DatagramPacket(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 = new DatagramPacket(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 class AskClient 7 { 8 public static void main(String[] args) 9 { 10 //建立DatagramSocket,发送接收数据都依赖他
11 DatagramSocket socket = null; 12 try
13 { 14 socket = new DatagramSocket(9999); 15 Scanner input = new Scanner(System.in); 16 while (true) 17 { 18 //准备要发送的数据
19 String str = input.nextLine();//bye 20 //使用数据包把数据封装起来
21 byte[] buf = str.getBytes(); 22 DatagramPacket packet = new DatagramPacket(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 = new DatagramPacket(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 }
6、 可选题
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 class LoginServer 2 { 3 public static void main(String[] args) throws Exception 4 { 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 ois 11 = new ObjectInputStream(socket.getInputStream()); 12 DataOutputStream dos 13 = new DataOutputStream(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 class LoginClient 2 { 3 public static void main(String[] args) throws Exception 4 { 5 // 1.建立Socket,用来发送请求(0.5分)
6 Socket socket 7 = new Socket(InetAddress.getByName("127.0.0.1"), 8888); 8 // 2.建立输入流和输出流(0.5分)
9 DataInputStream dis 10 = new DataInputStream(socket.getInputStream()); 11 ObjectOutputStream oos 12 = new ObjectOutputStream(socket.getOutputStream()); 13 // 3.发送数据(1分)
14 Scanner input = new Scanner(System.in); 15 System.out.println("请输入用户名"); 16 String username = input.nextLine(); 17 System.out.println("请输入密码"); 18 String password = input.nextLine(); 19 User user = new User(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 }