java学习笔记(11)--网络通信

来源:互联网 发布:教育统计软件安装 编辑:程序博客网 时间:2024/06/07 11:53

一、题目

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(); }}
原创粉丝点击