《Java基础入门第2版》--黑马程序员 课后答案及其详解 第11章 网络编程

一、填空题

1、面向连接、客户端、服务器端      
2、2、0-65535
3、链路层、网络层、运输层、应用层
4、InetAddress
5、DatagramPacket、DatagramSocket

二、判断题

1、错  2、对   3、对  4、错  5、对  

三、选择题

1、C     2、ABD    3.、A    4、B   5、C

四、简答题

1、在Internet中传输数据都需要遵守一定的规则,这种规则通常被称作网络通信协议。网络通信协议对数据传输格式、传输速率、传输步骤等作了统一规定,通信双方必须共同遵守这个规定才能完成数据的交互。到目前为止,网络通信协议已经有很多种,其中TCP/IP协议在世界范围内应用最为广泛。

2、UDP协议是无连接通信协议,所谓的无连接就是指数据的发送端和接收端不建立逻辑连接。由于UDP协议消耗资源小,通信效率高,通常都会用于音频、视频和普通数据的传输。UDP协议在传输数据时不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。
TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。
3、ServerSocket类用于创建服务端程序,通过调用ServerSocket对象的accept()方法,接收来自客户端的请求。

Socket类用于创建客户端程序,当客户端和服务端的两个Socket建立了专线连接后,连接的一端既能向另一端连续写入字节,也能从另一端读取字节。Socket类中定义了getInputStream()方法返回Socket的输入流对象,定义了getOutputStream()方法返回Socket的输出流对象。只要连接的一端向该输出流对象写入了数据,连接的另一端就能从其输入流对象中读取到。

五、编程题

1、
接收端:

import java.net.*;
public class Receiver {
    
    
	public static void main(String[] args) throws Exception {
    
    
		byte[] buf = new byte[1024];  
		DatagramSocket ds = new DatagramSocket(8001);
		DatagramPacket dp = new DatagramPacket(buf, 1024);
		ds.receive(dp);  
		String str = new String(dp.getData(),0, dp.getLength());
		System.out.println(str);
		ds.close(); 
	}
}

发送端:

import java.net.*;
public class Send {
    
    
	public static void main(String[] args) throws Exception {
    
    
		DatagramSocket ds = new DatagramSocket(3000);
		String str = "hello world"; 
		DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(),
				InetAddress.getByName("localhost"), 8001);
		ds.send(dp);
		ds.close();
	}
}

2.服务端

import java.io.*;
import java.net.*;
public class Server {
    
    
	public static void main(String[] args) throws Exception {
    
    
		new TCPServer().listen();
	}
}
class TCPServer {
    
    
	public void listen() throws Exception {
    
    
		ServerSocket serverSocket = new ServerSocket(8002);
		Socket client = serverSocket.accept();
		OutputStream os = client.getOutputStream();
		os.write(("hello world").getBytes());
		Thread.sleep(5000); 
		os.close();
		client.close();
	}
}

客户端

import java.io.*;
import java.net.*;
public class Client {
    
    
	public static void main(String[] args) throws Exception {
    
    
		new TCPClient().connect();
	}
}
class TCPClient {
    
                 
	public void connect() throws Exception {
    
    
		Socket client = new Socket(InetAddress.getLocalHost(), 8002);
		InputStream is = client.getInputStream();     
		byte[] buf = new byte[1024];
		int len = is.read(buf);
		System.out.println(new String(buf, 0, len));
		client.close();                                    
	}
}

六、原题及其解析

暂无。

猜你喜欢

转载自blog.csdn.net/hypertext123/article/details/109315387