zoukankan      html  css  js  c++  java
  • JAVA入门到精通-第85讲-url.port.socket编程原理

    TCP/IP协议中的端口,是逻辑意义上的端口;
    netstat -an
    端口监听---提供服务;

    smtp简单邮件传输协议
    1025-65535是动态端口

    能不开的端口就关闭;

    netstat  -anb 
    查看进程ID号;

    进程号PID---1316;

    被svchost.exe监听

    svchost     system

    PID 进程标识

    1433      sqlserver.exe

    -url  统一资源定位符,网页地址



    -单工、半双工、全双工通信
     -BP机、对讲机、电话


    监听的一方---服务器;ServerSocket()
    accept()等待连接,一直等待;
    readLine() 读取数据;
    println() 回送数据;

    主动连接的一方---客户端;
    Socket() 发送请求;
    println()发送数据;
    readLine()读取从服务器发来的数据;


    -netTestServer 服务器端
    import java.net.*;
    //在9999号端口监听
    ServerSocket  ss=new  ServerSocket(9999);
    System.out.println("xxxxxxx");
    //该函数会返回一个Socket连接
    ss.accept(); 




     11没有打印出来,没有连接,会一直阻塞在这里,等待连接;

    -netTestClient客户端
    Socket("服务器IP地址",“端口号”);
    需要抛出异常;
    如果在监听,Socket 会打成一个通道;


    //通过pw,向s写数据;
    //客户端,服务器端的s是同一个连接,在一个通道里面通话;
    //true表示及时刷新
    PrintWriter pw=new  PrintWriter(s.getOutputStream(),true);


    -服务器读取数据readLine();


    br 主要是用来读的;接收信息;

    服务器端println();
    pw 服务器给客户端发送一句话;

    客户端println();
    客户端会送给服务器;

    客户端readLine();


    端口(port)--概念

        在网络技术中,端口(Port)有好几种意思。集线器、交换机、路由器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。我们这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口。

        如果把IP地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536(即:256*256)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从065535(256*256-1)

     

    端口(port)--分类

    65536个端口  0号是保留端口

    1-1024是固定端口

    又叫有名端口,即被某些程序固定使用,一般程序员不使用。

    22SSH远程登录协议  23telnet使用    21ftp使用

    25smtp服务使用    80iis使用 7echo服务

    1025-65535是动态端口

    这些端口,程序员可以使用

     

    端口(port)--注意事项

    1、在计算机(尤其是做服务器)要尽可能的少开端口;

    2、一个端口只能被一个程序监听;

    3、如果使用netstat -an可以查看本机有哪些端口在监听

    4、可以使用netstat -anb来查看监听端口的pid,在结合任务管理器关闭不案例的端口。

     

    url--概念

        统一资源定位符(URL,英语Uniform Resource Locator的缩写)也被称为网页地址,是因特网上标准的资源的地址。它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址的。现在它已经被万维网联盟编制为因特网标准RFC1738了。4

        Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL地址,这种地址可以是本地磁盘,也可以是局域网上的某一台计算机,更多的是Internet上的站点,简单地说,URL就是Web地址,俗称“网址”,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。

     

    url--组成

    http://www.sina.com:8080/index.html

    1、协议;2ip地址(32)3、端口号(16)0-655354、资源名称。

     

    单工、半双工和全双工

        如果甲可以向乙发送数据,但是乙不能向甲发送数据,这样的通信就是单工通信(Simplex Communication)

        单工数据传输只支持数据在一个方向上传输,就和传呼机一样。

        半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信,就和对讲机(步话机)一样;

    全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力,就和电话一样。



    半双工网络C/S演示

    [MyServer.java]

    x
    1
    /**
    2
     * 这是第一个服务器端程序,让它在9999端口监听
    3
     * 可以接收客户端发来的数据
    4
     */
    5
    6
    import java.io.BufferedReader;
    7
    import java.io.IOException;
    8
    import java.io.InputStream;
    9
    import java.io.InputStreamReader;
    10
    import java.io.PrintWriter;
    11
    import java.net.*;
    12
    13
    public class MyServer {
    14
        public static void main(String[] args) {
    15
            new MyServer();
    16
        }
    17
        
    18
        //构造函数
    19
        public MyServer(){
    20
            try {
    21
                //在9999号端口上监听
    22
                ServerSocket ss=new ServerSocket(9999);
    23
                System.out.println("9999端口监听...");
    24
                //等待某个客户端来连接,该函数会返回一个Socket连接
    25
                Socket s=ss.accept();
    26
                //要读取s中传递的数据
    27
                InputStreamReader isr=new InputStreamReader(s.getInputStream());
    28
                BufferedReader br=new BufferedReader(isr);
    29
                
    30
                String info=br.readLine();
    31
                System.out.println("服务器接收到:	"+info);
    32
                
    33
                PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
    34
                pw.println("我是服务器,已收到你发送的信息!");
    35
                
    36
            } catch (IOException e) {
    37
                e.printStackTrace();
    38
            }
    39
        }
    40
    }
    41

    [MyClient.java]
    x
    35
     
    1
    /**
    2
     * 这是一个客户端程序,可以连接服务器端口9999
    3
     */
    4
    5
    import java.io.BufferedReader;
    6
    import java.io.IOException;
    7
    import java.io.InputStreamReader;
    8
    import java.io.PrintWriter;
    9
    import java.net.*;
    10
    11
    public class MyClient {
    12
        public static void main(String[] args) {
    13
            new MyClient();
    14
        }
    15
        
    16
        public MyClient(){
    17
            try {
    18
                //Socket()就是去连接某个服务器端 127.0.0.1表示服务器的ip
    19
                //9999是服务器的端口号
    20
                Socket s=new Socket("127.0.0.1",9999);
    21
                //如果s连接成功,就可以发送数据到服务器端
    22
                //我们通过pw向s写数据,true表示即时刷新
    23
                PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
    24
                pw.println("你好吗?我是客户端");
    25
                //要读取s中传递的数据
    26
                InputStreamReader isr=new InputStreamReader(s.getInputStream());
    27
                BufferedReader br=new BufferedReader(isr);
    28
                String info=br.readLine();
    29
                System.out.println("接收到服务器:	"+info);
    30
            } catch (Exception e) {
    31
                e.printStackTrace();
    32
            }
    33
        }
    34
    }
    35























  • 相关阅读:
    任务---内部揭秘
    线程
    c#制作com组件供wincc调用
    线程----计算限制的异步操作2
    随笔,聊一聊任务取消
    C#制作Wincc组件进行配方管理(二)
    MongoDB导入导出以及数据库备份111
    浏览器访问页面步骤
    C#中的继承和多态
    网关和路由器的区别
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10047888.html
Copyright © 2011-2022 走看看