1.D 2.B 3.C 4.B 5.C 6.D 7.A 8.C 9.D 10.B 11.A 12.A 13.B 14.A 15.B 16.D
1. InetAddress 2. ServerSocket类 , Socket类。 3. MulticastSocket 4. TCP协议 , UDP协议 , 网络游戏 ,视频会议 5. openStream() ,InputStream openStream() 6. MalformedURLException ,try-catch语句 7.套接字 ,IP地址, 端口
1. 套接口(Socket),是传送层提供的网络进程通信接口。通讯的主动方是顾客,它利用Socket,向服务器(接收方)发送请求,服务器接收顾客请求,返回服务结果。进程之间想通信首先要建立各自的套接口。端口同一台网络计算机的一个特定进程关联,与进程建立的套接口绑定在一起。客户程序必须事先知道自己要求的那个服务进程的壹IP地址和端口号。程序员在创建自己的应用服务程序时一般自己指定一个端口号,也可以由系统分配一个端口号。客户通过这个端口号连接该服务进程。客户端应用进程象服务进程一样,也有自己的端口号,通过该端口客户端应用进程与服务进程通信。
2. TCP(Transport Control Protocol)传输控制协议是面向连接的、可靠的点对点的连接的协议。

TCP是一种可靠的、基于连接的网络传输协议,当两个网络进程准备进行通信时,都必须首先建立各自的一个套接口,其中服务器建立套接口后,侦听来自网络的客户连接请求,客户通过套接口,指定服务器的IP 地址和端口号,便可与服务器通信。
服务程序运行在服务器主机的某个端口上,一旦启动服务,它将在这个端口上倾听,等待客户程序发来的请求。服务器的套接口用服务器套接口类(ServerSocket)来建立。方法accept() 使服务者等待,直到有客户连接到该端口。一旦有客户送来正确请求,连接至该端口, accept()方法就返回一个新的套接口对象soc,表示已建立好连接。服务者使用它们从客户接受输入信息和向客户程序发送信息所用,同样,在客户端也应该建立这两个对象,用来与服务程序进行双向通信。服务者向输出流发送的所有信息都成为客户的输入信息,而客户程序的输出都送入服务者的输入流。
UDP(User Datagram Protocol)用户数据报协议是无连接的传输不可靠的协议。

UDP协议把要发送的数据及对方的IP地址、对方端口号构成报文,不与对方连接就把报文一个个独立地地发送出去。UDP协议本身不能保证数据报一定到达目的地,不能保证数据报到达目的地顺序。但是,这种服务的可靠性可以有应用层来实现。
服务器利用UDP协议实现客户和服务器之间通信,首先建立数据报套接口对象,自己指定一个端口号,也可以由系统自动确定端口号。利用无参的构造方法DatagramSocket()系统自动确定端口号,这时必须利用getLocalPort())方法获取该数据报端口号。这个端口号及服务器的IP地址对客户方发送报文来说是必须知道的。否则,客户方无法发送报文。
客户方利用UDP协议实现客户和服务器之间通信,首先也要建立数据报套接口对象,一般使用无参的构造方法DatagramSocket(),这时,系统自动确定一个端口号,然后利用发送报文缓冲区、服务器的IP地址及服务器的端口号建立发送数据包DatagramPacket对象。利用建立的数据报套接口发送该DatagramPacket对象。
3. URL(Uniform Resource Locator)是WWW资源统一资源定位器的简写。它规范了WWW资源网络定位地址的表示方法。一个URL的组成部分有:WWW资源的特征及读其内容的方法。URL的基本表示格式是:protocol://hostname:/resourcename#anchor;其中:protocol(使用的协议):它可以是http、ftp、news、telnet等;hostname(主机名):指定域名服务器(DNS)能访问到的WWW服务的计算机;port(端口号):是可选的,表示所连的端口号,如缺省,将连接到协议缺省的端口;Resourcename(资源名):是主机上能访问到的目录或文件;anchor(标记):也是可选的,它指定文件中的有特定标记的位置。
4. try{
Socket socket=new Socket(目标主机,目标端口);
}catch(IOException e){
System.out.println("Error:"+e);
}
5. ServerSocket server=null;
try {
server=new ServerSocket(监听端口);
}catch(IOException e){
System.out.println("can not listen to :"+e);
}
Socket socket=null;
try {
socket=server.accept();
}catch(IOException e){
System.out.println("Error:"+e);
}
6. PrintStream os=new PrintStream(new BufferedOutputStreem(socket.getOutputStream()));
DataInputStream is=new DataInputStream(socket.getInputStream());
PrintWriter out=new PrintWriter(socket.getOutStream(),true);
BufferedReader in=new ButfferedReader(new InputSteramReader(Socket.getInputStream()));
7. TCP,可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大。
UDP,不可靠,差错控制开销较小,传输大小限制在64K以下,不需要建立连接。
8. DatagramSocket(); DatagramSocket(int prot); DatagramSocket(int port, InetAddress laddr), port指明socket所使用的端口号,如果未指明端口号,则把socket连接到本地主机上一个可用的端口。laddr指明一个可用的本地地址。
1. import java.net.*;
import java.io.*;
class Ping {
public static void main(String[] args)
{ System.out.println("请输入ping主机名称或地址:\n");
try {
String host = keyreadline();
InetAddress ip = InetAddress.getByName(host);
long t1 = System.currentTimeMillis();
if(ip.isReachable(5000))
{ long t2 = System.currentTimeMillis();
System.out.println("\nReply from " + ip.getHostAddress() + " time<=" + (t2-t1) + "ms");
System.out.println();
}
else { System.out.println("Request timed out.");
} }
catch (IOException e)
{ System.out.println("Request timed out."); }
}
private static String keyreadline( ) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace(); }
return str;
}
}
2.
import java.net.*;
import java.io.*;
class Server{
public Server() {
try {
ServerSocket ss = new ServerSocket(8629);
System.out.println("服务器端已运行,等待客户端连接:");
Socket socket = ss.accept(); //接收客户端的连接请求;
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
while(true)
{line = (in.readLine().trim());
if(line.equals("BYE"))
{ out.println("BYE");
out.close();
in.close();
socket.close();
br.close();
ss.close();
break;}
System.out.println("客户输入为 :" + line);
System.out.println("请输入回答:" );
line=br.readLine(); //从键盘上输入信息;
out.println(line); //向对方发送信息
} }
catch (IOException e){}
}
public static void main(String[] args) throws Exception{
new Server();
}
}
3.
import java.io.*;
import java.net.*;
class Client2{
public Client2()
{ try
{String s;
Socket socket = new Socket("服务器地址", 8629);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
while(true)
{ System.out.println("请向服务器输出一条字符串:");
s=line.readLine();
out.println(s); //向服务器发出信息;
s=in.readLine().trim(); //收到服务器发来的信息;
System.out.println("服务器返回的信息是:");
System.out.println(s);
if(s.equals("BYE"))
{ out.println("BYE");
line.close();
out.close();
in.close();
socket.close(); break;}
}
}
catch (IOException e){}
}
public static void main(String[] args) {
new Client2();
}}