精华内容
下载资源
问答
  • TCP是Transfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上...

    url:http://www.cnblogs.com/mouseIT/p/4186931.html

    TCPTransfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。

    UDPUser Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

    (一)两者之间的比较

    UDP:

    1. 每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。
    2. UDP传输数据时有大小限制的,每个被传输的数据报必须限定在64KB之内
    3.  UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

    TCP:

    1. 面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中需要连接时间。
    2. TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的 数据。
    3. TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。

    (二)应用

    1. TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。但是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此TCP传输的效率不如UDP高
    2. UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。

    注:以上内容是在网上找的,为了节省时间,我就不再自己写了。

     

    下面我们来看看如何搭建socket环境:

         socket通信分为客户端和服务器端。服务器端会不停的监听,当服务器端监听到有客户端向其发送通信请求的时候,双方建立连接。通信完毕后,双方关闭连接。

     首先我们来看如何搭建客户端:

    复制代码
    public class SocketClient {
        public static void main(String[] args) throws IOException{
    
        try{
                Socket socket=new Socket("127.0.0.1",5200);
                System.out.println("client start ...");
                //向本机的52000端口发出客户请求
                BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                //由系统标准输入设备构造BufferedReader对象
                PrintWriter write=new PrintWriter(socket.getOutputStream());
                //由Socket对象得到输出流,并构造PrintWriter对象
                BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //由Socket对象得到输入流,并构造相应的BufferedReader对象
                String readline;
                readline=br.readLine(); //从系统标准输入读入一字符串
                while(!readline.equals("end")){
                    //若从标准输入读入的字符串为 "end"则停止循环
                    write.println(readline);
                    //将从系统标准输入读入的字符串输出到Server
                    write.flush();
                    //刷新输出流,使Server马上收到该字符串
                    System.out.println("Client:"+readline);
                    //在系统标准输出上打印读入的字符串
                    System.out.println("Server:"+in.readLine());
                    //从Server读入一字符串,并打印到标准输出上
                    readline=br.readLine(); //从系统标准输入读入一字符串
                } //继续循环
                write.close(); //关闭Socket输出流
                in.close(); //关闭Socket输入流
                socket.close(); //关闭Socket                       
            }catch(Exception e) {
                System.out.println("can not listen to:"+e);//出错,打印出错信息
            }
        }
    
    }
    复制代码

     

    下面是服务器端得搭建:

    复制代码
    public class SocketService {
        public static void main(String[] args) throws IOException{
            SocketService socketService = new SocketService();
            socketService.oneServer();
        }
        
        public  void oneServer(){
            try{
                ServerSocket server=null;
                try{
                    server=new ServerSocket(5200);
                    System.out.println("server start is ok...");
                    //创建一个ServerSocket在端口5200监听客户请求
                }catch(Exception e) {
                        System.out.println("can not listen to:"+e);
                        //出错,打印出错信息
                }
                Socket socket=null;
                try{
                    socket=server.accept();
                    //使用accept()阻塞等待客户请求,有客户
                    //请求到来则产生一个Socket对象,并继续执行
                }catch(Exception e) {
                    System.out.println("Error."+e);
                    //出错,打印出错信息
                }
                String line;
                BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //由Socket对象得到输入流,并构造相应的BufferedReader对象
                PrintWriter writer=new PrintWriter(socket.getOutputStream());
                //由Socket对象得到输出流,并构造PrintWriter对象
                BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                //由系统标准输入设备构造BufferedReader对象
                System.out.println("Client:"+in.readLine());
                //在标准输出上打印从客户端读入的字符串
                line=br.readLine();
                //从标准输入读入一字符串
                while(!line.equals("end")){
                //如果该字符串为 "bye",则停止循环
                    writer.println(line);
                    //向客户端输出该字符串
                    writer.flush();
                    //刷新输出流,使Client马上收到该字符串
                    System.out.println("Server:"+line);
                    //在系统标准输出上打印读入的字符串
                    System.out.println("Client:"+in.readLine());
                    //从Client读入一字符串,并打印到标准输出上
                    line=br.readLine();
                    //从系统标准输入读入一字符串
                } //继续循环
                writer.close(); //关闭Socket输出流
                in.close(); //关闭Socket输入流
                socket.close(); //关闭Socket
                server.close(); //关闭ServerSocket
            }catch(Exception e) {//出错,打印出错信息
                System.out.println("Error."+e);
            }
        }
    }
    复制代码

    这是我们先启动服务器端,再启动客户端(顺序不能乱),当我在客户端输入abc时,如下:

    我们再打开服务器端得控制台,会看到客户端发送的消息:

    然后我们再输入123:

    我们再打开客户端得控制台:

    这里显示了服务端回传的信息,证明我们的通信是没有问题的了。

    以上的服务端只能监听一个客户端,要想是想监听多个客户端,我们对服务端做一下修改:

    复制代码
    public  void manyServer() throws IOException{
         boolean flag = true;
          ServerSocket serverSocket = null;
          serverSocket = new ServerSocket(5200);
          int clientNum = 0;
          while(flag){
              new SocketServerTherd(serverSocket.accept(), clientNum).start();
              clientNum++;
          }
          serverSocket.close();
        }
    复制代码
    复制代码
    public class SocketServerTherd extends Thread{
        Socket socket = null;
        int clientNum = 0;
         public SocketServerTherd(Socket socket,int num){
             this.socket = socket;
             this.clientNum = num+1;
         }
         public void run(){
             try{
                 String line;
                 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                 //由Socket对象得到输入流,并构造相应的BufferedReader对象
                 PrintWriter writer=new PrintWriter(socket.getOutputStream());
                 //由Socket对象得到输出流,并构造PrintWriter对象
                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                 //由系统标准输入设备构造BufferedReader对象
                 System.out.println("Client:"+in.readLine());
                 //在标准输出上打印从客户端读入的字符串
                 line=br.readLine();
                 //从标准输入读入一字符串
                 while(!line.equals("end")){
                 //如果该字符串为 "bye",则停止循环
                     writer.println(line);
                     //向客户端输出该字符串
                     writer.flush();
                     //刷新输出流,使Client马上收到该字符串
                     System.out.println("Server:"+line);
                     //在系统标准输出上打印读入的字符串
                     System.out.println("Client:"+in.readLine());
                     //从Client读入一字符串,并打印到标准输出上
                     line=br.readLine();
                     //从系统标准输入读入一字符串
                 } //继续循环
                 writer.close(); //关闭Socket输出流
                 in.close(); //关闭Socket输入流
                 socket.close(); //关闭Socket             
             }catch(Exception e) {//出错,打印出错信息
                 System.out.println("Error."+e);
             }
               
         }
    }
    复制代码

    展开全文
  • 它的网络层只支持一种面向无连接的服务, 但传输层同时支持TCP(面向连接)UDP(面向无连接)两种通信模式。 面向连接无连接的概念: 面向连接:  ->服务:指用户首先必须先建立一个连接,然后用这...

    TCP/IP :

        实用性高于七层。广为流传,模型本身没有多大用处。它对服务,接口和协议没有明确的区分, 下图也是人们对它进行了改进,使它更像OSI.它的网络层只支持一种面向无连接的服务, 但传输层同时支持TCP(面向连接)和UDP(面向无连接)两种通信模式。

    面向连接和无连接的概念:

    面向连接:

       ->服务:是指用户首先必须先建立一个连接,然后用这个连接传输数据,再释放或关闭连接.如:一个管道,发送方把数据压入管道的一端, 接收方在另一端将它们取出来.基本保持顺序.

        ->协议: TCP, 全双工, 收发两端可以同时发送和接收.连接建立需要经过3次握手, 连接断开需要4次所致手.连接方式是点对点的, 无法做到多播.

    面向无连接:

       ->服务:不保证传输的数据到达,且可能无序.每个报文都携带了完整的目标地址, 由系统的中间路由出去.

       ->协议:UDP,几乎是直接和网络层的IP协议通信.在两个进程通信之前没有握手的过程, 因此称为无连接服务.当一端需要发送报文时, 通过UDP套接字发送报文,UDP不保证有序, 不保证一定被接收端收到.且没有拥塞的控制.

    1.应用层

    应用层决定了向用户提供应用服务时的通信活动。

    FTP(文件传输协议)和DNS(域名系统)域名系统提供域名到ip地址的解析服务、http协议都是处于该层。

    2.传输层

    传输层对上层应用层、提供处于网络连接中的两台计算机之间的数据传输。

    传输层有两个不同的协议:TCP(传输控制协议)和UDP(用户数据报协议)、UDP不能保证数据无误的传输,协议不可靠。

    3、网络层(IP)

    用来处理网络上的数据包,数据包是网络传输的最小数据单位,该层规定了通过怎么样的路径到达对方计算机,并把数据包传送给对方。

    与对方计算机之间通过多台计算机或者网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。

    4、链路层(数据链路层、网络接口层)

    用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、网卡,及光纤等物理课件部分。硬件上的范畴均在链路层的作用范围之内。

    为了将数据准确无误的传递到目标处,TCP进行了三次握手,握手采用TCP的标志 -----SYN(synchronize)和ACK(acknowledgement)。

    客户端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息,最后客户端再回传一个带ACK标志的数据包,代表握手结束。

    握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开)。

    实例一:
    IP 192.168.1.116.3337 > 192.168.1.123.7788: S 3626544836:3626544836
    IP 192.168.1.123.7788 > 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837
    IP 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1

    第一次握手:192.168.1.116发送位码syn=1,随机产生seq number=3626544836的数据包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求建立联机;
    第二次握手:192.168.1.123收到请求后要确认联机信息,向192.168.1.116发送ack number=3626544837,syn=1,ack=1,随机产生seq=1739326486的包;
    第三次握手:192.168.1.116收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,192.168.1.116会再发送ack number=1739326487,ack=1,192.168.1.123收到后确认seq=seq+1,ack=1则连接建立成功。

     

    Socket

    套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

    应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

    套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

    通过下图可以看, 实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议:

    URL和URI区别

    URL是统一资源定位符,URI是统一资源标识符,URI用字符串标识某一互联网的资源,而URL标识资源的地点(互联网所处的位置)。

     

    HTTP协议

    1.HTTP协议请求报文

    请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成。

    HTTP协议响应报文

    响应报文是由西一版本、状态码以及结识状态码的短语,可选响应首部字段和实体组成的。

    3.HTTP协议方法

    GET:获取资源

    用来请求访问已被URI标识的资源。制定的资源经服务器解析后返回响应内容,也就是说请求的资源是文本,那就保持原样返回。

    POST:传输实体主体

    虽然GET方法也能传输实体主体,但是一般不用GET方法进行传输,而是用POST,POST请求参数在body中,用户不可见,而get传输内容拼接在URL中,用户可见,安全性较差。

    PUT:传输文件

    用来传输文件,就像FTP协议的文件上传一样,要求在请求报文中主体重包含文件内容,然后保存到URI指定的位置。

    但是PUT不带验证机制,存在安全问题,web网站一般不使用。

    HEAD:获取报文首部

    HEAD和GET一样,只是不返回报文主体,用于确认URI的有效性及资源更新的日期时间等。

    DELETE:删除文件

    与PUT相反的方法,用来按请求URI删除制定文件。

    与PUT一样不带验证机制,存在安全问题,web网站一般不使用,使用必须配合程序验证机制一起使用。

    OPTIONS:询问支持的方法

    OPTIONS方法用来查询针对请求URI指定资源的支持方法。

    TRACE:追踪路径

    让web服务器端将之前的请求通信环会给客户端的方法。

    CONNECT:要求用隧道协议连接代理

    要求和代理服务器通信时建立隧道,实现隧道协议进行TCP通信,主要使用SSL(安全套接字)和TSL(传输层安全)协议把通信内容加密后经网络隧道传输。

    Websocket

    Websocket协议解决了服务器与客户端全双工通信的问题。

    注:什么是单工、半双工、全工通信? 
    信息只能单向传送为单工; 
    信息能双向传送但不能同时双向传送称为半双工; 
    信息能够同时双向传送则称为全双工。

    websocket协议解析 
    wensocket协议包含两部分:一部分是“握手”,一部分是“数据传输”。

    WebSocket和Socket区别

    可以把WebSocket想象成HTTP(应用层),HTTP和Socket什么关系,WebSocket和Socket就是什么关系。

    HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。

    WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。 
    它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
     

     

     

     

     

    展开全文
  • <p>HSTS 就是一种安全策略的机制,为了让浏览器强制使用 HTTPS 访问的,详细可以去这篇文章看,介绍的比较清楚。当你的网站均采用 HTTPS,并符合它的安全规范,就可以申请加入 HSTS...
  • JAVA 网络编程(10)

    2018-07-18 17:35:48
    JAVA面向网络编程 通过本文将学习到 什么网络编程 URL类获取网络信息 Socket的解释 ...就是能通过网络进行交互的一种模式。附上百度百科解释。 网络编程最主要的工作就是在发送端把信息通过规定好...

    JAVA面向网络编程

    通过本文将学习到

    1. 什么是网络编程
    2. URL类获取网络信息
    3. Socket的解释
    4. 通过Socket实现底层网络通信
    5. 一个简单的服务器和客户端的通信

    2、网络编程

        什么是网络编程?我对网络编程的理解就是程序能够再网上相互交流数据信息,同时处理一些事情。再返回!就是能通过网络进行交互的一种模式。附上百度百科解释。

    网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理,代码、开发工具、数据库、服务器架设和网页设计这5部分你都要接触。

    3、URL类

    JAVA中一般通过java.net包的类进行编程。URL类便是JAVA对网络资源地址的表示。

    URL:Uniform Resouce Location(即是同一资源地址),其基本格式是

    协议名:主机名/目录及文件名                                            例子:https://mp.csdn.net/postedit/81101114

    如何通过URL获取网上的文件内容了?

    1. 创建一个URL类                           URL url = new URL(“https://www.baidu.com");
    2. 利用URL类的openStream()方法获取对应的输入流                InputStream in = url.openStream();
    3. 通过InputStreae读取类容.

    下面是实例代码。

    package chapter10;
    
    import java.applet.*;
    import java.awt.Frame;
    import java.awt.TextArea;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    /**
     * 
    * <p>Title: URLGetFile</p>  
    * <p>Description:this method is used to test URL doload File . first step ,create a project of URL object .seconde step 
    * get outputstream from URL object .Then read it.
    * 使用url对象来读取网络上的文件 。
    * </p>  
    * @author HAND_WEILI  
    * @date 2018年7月18日
     */
    
    public class URLGetFile extends Applet {
    	public URL url;
    	TextArea showarea = new TextArea("展示对应的文件数据");
    	
    	
    	public void init() {
    		try {
    			url = new URL("https://www.baidu.com");		//创建对应的url对象 URL的格式是	 协议名:主机名/文件及项目名                https://www.baidu.com/ 
    		} catch (MalformedURLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}	
    		add(showarea);
    	}
    	
    	
    	public void start() {	
    		InputStream in = null;	//定义输入流
    		BufferedReader reader = null;	//定义缓冲流
    		String line;
    		try {
    			 in = url.openStream();	//将url得到的数据转为输入流
    			 reader = new BufferedReader(new InputStreamReader(in));	//将数据处理
    			 while((line = reader.readLine())!=null) {	//直接将东西写进去了 。平时要在外面定义变量然后再不停往下读 。
    				 showarea.append(line+"\n");//将类容加入are
    			 }
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	//====================测试
    	public static void main(String[] args) {
    		Frame f = new Frame("url test");
    		Applet ap = new URLGetFile(); //将applet放入这个frame种
    		ap.init();	//启动一下
    		f.add(ap);	//将applet加入jfame
    		f.addWindowListener(new WindowAdapter(){ 
    			 public void windowClosing(WindowEvent e){System.exit(0);}
    		});		//提供关闭事件
    		f.setSize(400, 300);
    		f.setLocationRelativeTo(null);
    		f.setVisible(true);
    		ap.start();
    	}
    }
    

     

    4、Socket实现底层网络通信

    socket是套接字的意思,是一种网络通信协议。属于TCP/IP协议的编程接口,通信双方通过Socket进行交互。

    一般来说会建立一个对应的服务端ServerSocket,来不停的listen()网络中的请求。说到请求交互,不得不了一下IP、协议和端口了 。我们都知道没一台连接到因特网的机器都是有一个独立的IP地址。这是用来定位唯一一台机器。而没一个机器都有很多端口,这些端口就是用来进行网络通讯的一个入口。每一个端口对应一个服务不能够抢占,因此通过IP地址和端口号就能够唯一的确定是那一台电脑上哪一个服务再请求信息。因此,在做服务器的Socket的时候需要监听请求。可以通过一个多线程,或者一个死循环不停的在网络中监控。知道接受到请求,ServerSocket通过accept()方法接受到请求,当接受到对应的请求后创建一个新的Socket来接收。然后通过流来进行读取,或者写入。通过一张图来解释!

    5、一个简单的服务器和客户端DEMO

    实现整个的过程,首先是创建一个服务端

    package chapter10;
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * 
    * <p>Title: TestServer</p>  
    * <p>Description:In this type you will leanrling about  how to compile Servers
    * 这是一个介绍怎么写简单的服务器的JAVA程序</p>  
    * @author HAND_WEILI  
    * @date 2018年7月18日
     */
    public class TestServer {
    	public static void main(String[] args) {
    		//1.创建服务端socket
    		ServerSocket s = null;
    		try {
    			//2、设置端口号
    			s = new ServerSocket(8888);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		//3、循环等待客户端的请求
    		while(true) {
    			try {
    				//4、创建soket接受得到的请求,这个方法一直阻塞知道成功获得了一个socket请求
    				System.out.println("正再被阻塞,等待客户端");
    				Socket s1 = s.accept();
    				//5、输出流.
    				OutputStream os = s1.getOutputStream();
    				//6、修改成处理流
    				DataOutputStream dos= new DataOutputStream(os);
    				dos.writeUTF("hello client i'm server");
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			System.out.println("已经传输");
    		}
    	}
    }
    

    2、接下来是客户端

    package chapter10;
    
    import java.io.*;
    import java.io.InputStream;
    import java.net.Socket;
    
    /**
     * 
    * <p>Title: TsetClient</p>  
    * <p>Description:this type is used to test easy client  用来测试简单的客户端</p>  
    * @author HAND_WEILI  
    * @date 2018年7月18日
     */
    
    public class TsetClient {
    	public static void main(String[] args) {
    		//1、创建一个socket来发请求
    		try {
    			Socket s = new Socket("127.0.0.1",8888);
    			//2、将读到的数据写出读数据
    			InputStream is = s.getInputStream();	
    			//2、1将流进行处理
    			DataInputStream dis = new DataInputStream(is);
    			//3、ok
    			System.out.println(dis.readUTF());
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    
    }
    

    6、总结

    今天学习了网络编程,怎么说了对其有基础理解但是!像多线程这一块的使用却感觉不太理解。需要在写一个例子多加深印象。其次使用网络+io+界面+多线程+正则实现网络爬虫可以研究一下 。然后接下来一个月的目标是将,淘淘商城完成,然后开始设计自己的个人网站!

    展开全文
  • Java网络编程

    2012-07-15 13:22:00
    Java的网络编程主要有三类: 一利用URL来获取网络上的资源以及将本地的数据...三基于UDP数据报网络编程,用于建立一种面向连接、传输数据到达目的地的顺序时间不可靠的连接方式。 获取IP地址域名: ...

    Java的网络编程主要有三类:

         一是利用URL来获取网络上的资源以及将本地的数据传送到网络的另一端;

         二是通过Socket(套接字)在客户机与服务器之间建立一个连接通道,来进行数据的传输与通信,此功能通常用于面向连接的通信;

         三是基于UDP数据报网络编程,用于建立一种非面向连接、传输数据到达目的地的顺序和时间不可靠的连接方式。

     

    获取IP地址和域名:

        1. 通过java.net.InetAddress类的静态方法getLocalHost()能获得本机的网络地址信息,也是一个InetAddress对象。

        2. InetAddress类的getHostAddress()方法,能获取该网络地址的IP信息。getHostName()方法获取网络地址的域名或者机器名。静态方法getByName()根据域名获得该域名代表的主机的网络地址信息,返回的是一个InetAddress对象。

        3. 当一个主机配置多个网络地址时,可以通过InetAddress类的getAllByName()静态方法根据域名获得该域名代表的主机的所有网络地址信息,返回的是InetAddress对象。

     

    获取网络资源(URL):

        1. java.net.URL的格式一般可以分为三个部分:

            a.协议名,指访问网络主机上资源所用的协议;

            b.主机名,指资源所在的主机的名称、IP地址或者域名;

            c.文件路径和文件名,指主机资源的具体地址。

            

            第一部分与第二部分之间用"://"分隔,第二部分与第三部分之间用"/"分隔,第三部分可省略,但第一、第二部分不可缺。

        2. Java使用URL的目的就是从网络上获得声音、图像、HTML文档以及文件数据等资源,以便对资源进行处理。URL类提供get()方法能够获取URL的主机地址、端口、协议等信息。

        3. 如果URL协议是HTTP,可以获取请求的方法、相应消息等。URL类打开URL的openConnection()方法可以得到一个URLConnection,该对象可以获得URL引用的资源信息,包括内容长度与类型、编码方式等。

    转载于:https://www.cnblogs.com/fanchangfa/archive/2012/07/15/2592247.html

    展开全文
  • 8:(808015)、URL由四部分组成,第部分( ),第二部分主机域名,第三部分(________________),第四部分网页文件的路径文件名。 协议名称,访问端口 9:(1103003)、在网络的层次化设计中从逻辑上,大型...
  • 2.3.8 无状态是一个协议问题 14 2.3.9 充当客户端的服务器 15 2.4 小结 15 进一步的研究 16 习题 16 第3章 客户.服务器软件的并发处理 17 3.1 引言 17 3.2 网络中的并发 17 3.3 服务器中的并发 18 3.4 ...
  • Dom绑定时间的另外一种方式 JavaScript 词法分析解析 前端学习方法分享 Sublime Text工具使用介绍 谢幕 第17周 今日内容概要 jQuery Dom关系及jQuery版本 jQuery选择器 实例多选反选取消 删选器以及Tab菜单示例 ...
  • JAVA基础课程讲义

    2017-08-30 23:39:14
    基于TCP协议的SOCKET编程和通信 193 UDP通讯的实现 201 思考作业 203 上机作业(分组完成,3人组,周末完成) 204 第十章 JAVA多媒体编程 205 字体 205 字体示例效果 205 颜色 206 颜色编程示例 206 图形绘制 ...
  • xonsh:一种基于 python 的跨平台,面向 unix 的 shell 语言命令提示符。 下载器 用来进行下载的库. s3cmd:一个用来管理 Amazon S3 CloudFront 的命令行工具。 s4cmd:超级 S3 命令行工具,性能更加...
  • 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
  • 一种bbs设计的思路,请各位高手给予评价 浏览器中显示JApplet(可解决引入Swing包的问题) 论坛搜索《sm版》 内有一篇文章或许有用 内置加密软件的嵌入用途Java软件今秋问世 评论(选自CSDN) 签名一个使用插件...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    4.5.1 理解数组:数组也是一种类型 88 学生提问:int[]是一种类型吗?怎么使用这种类型呢? 88 4.5.2 定义数组 88 4.5.3 数组的初始化 89 学生提问:能不能只分配内存空间,不赋初始值呢?89 4.5.4 使用数组 90...
  • 迭代器生成器 - 相关魔术方法 / 创建生成器的两方式 / 并发异步编程 - 多线程 / 多进程 / 异步IO / asyncawait Day21~30 - Web前端入门 用HTML标签承载页面内容 用CSS渲染页面 用JavaScript处理交互式...
  • 10.2 异步Socket通信——实现MSN机器人 390 10.2.1 机器人服务端 390 10.2.2 客户端实现步骤 395 10.3 基于TCP协议的客户端服务端 398 10.3.1 TcpListener 实现网络服务端 398 10.3.2 TcpClient实现网络客户端 399...
  • 10.2 异步Socket通信——实现MSN机器人 390 10.2.1 机器人服务端 390 10.2.2 客户端实现步骤 395 10.3 基于TCP协议的客户端服务端 398 10.3.1 TcpListener 实现网络服务端 398 10.3.2 TcpClient实现网络客户端 399...
  • 10.2 异步Socket通信——实现MSN机器人 390 10.2.1 机器人服务端 390 10.2.2 客户端实现步骤 395 10.3 基于TCP协议的客户端服务端 398 10.3.1 TcpListener 实现网络服务端 398 10.3.2 TcpClient实现网络客户端 399...
  • 10.2 异步Socket通信——实现MSN机器人 390 10.2.1 机器人服务端 390 10.2.2 客户端实现步骤 395 10.3 基于TCP协议的客户端服务端 398 10.3.1 TcpListener 实现网络服务端 398 10.3.2 TcpClient实现网络客户端 399...
  • 02 什么异常处理及异常处理的两方式对比 03 多分支与万能异常 04 异常处理的其他内容 05 什么时候用异常处理 06 什么是socket 07 套接字发展及分类 08 基于tcp协议的套接字编程 09 socket底层工作原理解释 10 ...
  • java范例开发大全(pdf&源码)

    热门讨论 2013-07-04 13:04:40
    实例98 这星期几 125 实例99 大小写互换 127 实例100 输出指定范围的素数 128 实例101 我出现了几次 129 实例102 算术表达式求值器 129 实例103 字符串对齐调整器 137 实例104 字符串的加密 139 实例105 使用...
  • Java范例开发大全 (源程序)

    热门讨论 2011-04-27 07:47:22
     实例98 这星期几 125  实例99 大小写互换 127  实例100 输出指定范围的素数 128  实例101 我出现了几次 129  实例102 算术表达式求值器 129  实例103 字符串对齐调整器 137  实例104 字符串的...
  • java范例开发大全源代码

    热门讨论 2011-10-30 23:31:51
     实例98 这星期几 125  实例99 大小写互换 127  实例100 输出指定范围的素数 128  实例101 我出现了几次 129  实例102 算术表达式求值器 129  实例103 字符串对齐调整器 137  实例104 字符...
  • java范例开发大全

    2013-03-08 20:06:54
    实例279 对多通信模式 544 实例280 自制浏览器 549 实例281 扫描TCP端口 551 实例282 TCP协议服务器 552 实例283 TCP协议客户机 553 实例284 Socket连接信息 555 实例285 Echo服务的客户端如何实现的? 556 实例...
  • Java范例开发大全(全书源程序)

    热门讨论 2013-04-05 11:50:26
    实例98 这星期几 125 实例99 大小写互换 127 实例100 输出指定范围的素数 128 实例101 我出现了几次 129 实例102 算术表达式求值器 129 实例103 字符串对齐调整器 137 实例104 字符串的加密 139 实例...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

url和socket通信是一种面向