文章目录
- 一、题目
- 1. 什么是TCP/IP协议?它有什么特点?
- 2. 简述URL与Socket通信的区别。
- 3. 简述Socket通信机制,说明客户端如何与服务器进行连接。
- 4. 说明并尝试通过URL连续从服务器上读取一个文本文件,并显示该文本文件的内容
- 5. 编写程序,用Socket通信机制在服务器和客户端之间传输文件。
一、题目
1. 什么是TCP/IP协议?它有什么特点?
TCP/IP协议是一种基于连接的、稳定高效的网络通信协议。它具有稳定高效、收发信息明确的特点。
TCP/IP(传输控制协议/网间协议)是internet的主要协议,定义了计算机和外设进行通信所使用的规则(应用层,传输层,网络层,链路层).。TCP/IP协议具有免费开放性、应用广泛性、可靠性高等特点。
2. 简述URL与Socket通信的区别。
URL通信是利用标识符表示出确定的地址从而实现通信双方的确认;而Socket通信则是通过通信双方的IP和端口号来标识通信双方,从而达到通信双方的鉴别与确认。
URL功能较为高级,通过URL Java程序可以直接送出或读入网络上的数据.
Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道。具体区别表现为:
(1)通信方式
Socket在服务器端运行通信程序,不停地监听客户端的连接请能够使通信发求,等待客户端请求服务当客户端提出请求时,马上连接并通信;
利用URL进行通信时,在服务器端常驻一个CGI程序,但它一直处于休眠状态。只有在客户端要求建立连接时才被激活,然后与用户进行通信。所以URL进行通信时,被动等待客户端的请求。
(2)连接数
Socket服务器可以同时与多个客户端进行相互通信
URL通信方式是服务器只能与一个客户端进行通信。
3. 简述Socket通信机制,说明客户端如何与服务器进行连接。
Socket通信机制就是服务器监听,客户端请求,连接确认与数据传输,释放连接。
建立连接的过程如下:
服务器端生成一个ServerSocket实例对象,随时监听客户端的连接请求
客户端生成一个Socket实例对象,并发出连接请求
服务器端通过accept()方法接收到客户端的请求后,开辟一个接口与之进行连接,并生成所需的I/O数据流
通信都是通过一对InputStream()和OutputStream()进行的。通信结束后,两端分别关闭对应的Socket接口
4. 说明并尝试通过URL连续从服务器上读取一个文本文件,并显示该文本文件的内容
package xiti11;
import java.net.*;
import java.io.*;
public class xiti11_4 {
public static void main(String args[]) throws Exception{
URL url = new URL("https://www.baidu.com/?tn=90066238_hao_pg");//URL
URLConnection urlc = url.openConnection();//创建连接
//获取服务器端字节流并读取
BufferedReader in = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
String inputLine;//按行读取
while((inputLine=in.readLine())!=null) {
System.out.println(inputLine);//输出
}
in.close();//关闭文件连接
}
}
5. 编写程序,用Socket通信机制在服务器和客户端之间传输文件。
服务器:
package xiti11;
//Network_3,C/S通信服务器端,接收字符串并显示
import java.net.*;
import java.io.*;
public class xiti11_5_server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
serverSocket = new ServerSocket(80);
} catch (IOException e) {
System.err.println("Could not listen on port: 80.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
String fromUser;
int strlen;
while (true) {
fromUser= in.readLine();
strlen=fromUser.length();
out.println("received string's length is: "+ strlen);
System.out.println("Server: received string's length is: "+ strlen);
if(fromUser.equalsIgnoreCase("Bye"))
break;
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
客户端:
package xiti11;
//Network_3,C/S通信客户端,发送字符串
import java.io.*;
import java.net.*;
public class xiti11_5_Client {
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
echoSocket = new Socket("127.0.0.1", 80);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: taranis.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "the connection to: taranis.");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
String userInput;
while (true){
userInput = stdIn.readLine();
out.println(userInput);
System.out.println("echo: " + in.readLine());
if(userInput.equalsIgnoreCase("Bye"))
break;
}
out.close();
in.close();
stdIn.close();
echoSocket.close();
}
}
```