JAVA入门到精通-第85讲-url.port.socket编程原理

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

1167156-20181201003112807-1140428774.png
smtp简单邮件传输协议
1025-65535是动态端口

1167156-20181201003113372-1986302692.png
能不开的端口就关闭;

netstat  -anb 
查看进程ID号;
1167156-20181201003114353-659911236.png

1167156-20181201003115229-1698499853.png
进程号PID---1316;

1167156-20181201003115894-1867853043.png
被svchost.exe监听

1167156-20181201003116902-669176430.png
svchost     system

1167156-20181201003117552-1874561402.png
PID 进程标识

1167156-20181201003118034-1949827960.png
1433      sqlserver.exe

-url  统一资源定位符,网页地址
1167156-20181201003118894-1887239863.png
1167156-20181201003119364-778807930.png

1167156-20181201003119908-1382773.png

1167156-20181201003120757-2147261848.png

-单工、半双工、全双工通信
 -BP机、对讲机、电话
1167156-20181201003121869-1240753431.png

1167156-20181201003122682-1783976218.png

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

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

1167156-20181201003124123-16811425.png

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

1167156-20181201003124752-2046860924.png

1167156-20181201003126756-8240702.png

1167156-20181201003127316-571010634.png

1167156-20181201003128301-569566886.png
 11没有打印出来,没有连接,会一直阻塞在这里,等待连接;

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


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


-服务器读取数据readLine();
1167156-20181201003131632-1271690461.png
1167156-20181201003132184-2025370772.png

1167156-20181201003132711-227271254.png
br 主要是用来读的;接收信息;

服务器端println();
1167156-20181201003132928-265703026.png
pw 服务器给客户端发送一句话;

客户端println();
1167156-20181201003133599-1625132001.png
客户端会送给服务器;

客户端readLine();
1167156-20181201003133925-1777191774.png


端口(port)--概念

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

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

 

端口(port)--分类

有65536个端口  0号是保留端口

1-1024是固定端口

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

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

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

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、协议;2、ip地址(32位);3、端口号(16位)0-65535;4、资源名称。

 

单工、半双工和全双工

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

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

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

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


1167156-20181201003134467-461672522.jpg

半双工网络C/S演示

[MyServer.java]

/** * 这是第一个服务器端程序,让它在9999端口监听 * 可以接收客户端发来的数据 */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.*; public class MyServer { public static void main(String[] args) { new MyServer(); } //构造函数 public MyServer(){ try { //在9999号端口上监听 ServerSocket ss=new ServerSocket(9999); System.out.println("9999端口监听..."); //等待某个客户端来连接,该函数会返回一个Socket连接 Socket s=ss.accept(); //要读取s中传递的数据 InputStreamReader isr=new InputStreamReader(s.getInputStream()); BufferedReader br=new BufferedReader(isr); String info=br.readLine(); System.out.println("服务器接收到:\t"+info); PrintWriter pw=new PrintWriter(s.getOutputStream(),true); pw.println("我是服务器,已收到你发送的信息!"); } catch (IOException e) { e.printStackTrace(); } } }
ServerSocket ss=
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("服务器接收到:\t"+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]
/** * 这是一个客户端程序,可以连接服务器端口9999 */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.*; public class MyClient { public static void main(String[] args) { new MyClient(); } public MyClient(){ try { //Socket()就是去连接某个服务器端 127.0.0.1表示服务器的ip //9999是服务器的端口号 Socket s=new Socket("127.0.0.1",9999); //如果s连接成功,就可以发送数据到服务器端 //我们通过pw向s写数据,true表示即时刷新 PrintWriter pw=new PrintWriter(s.getOutputStream(),true); pw.println("你好吗?我是客户端"); //要读取s中传递的数据 InputStreamReader isr=new InputStreamReader(s.getInputStream()); BufferedReader br=new BufferedReader(isr); String info=br.readLine(); System.out.println("接收到服务器:\t"+info); } catch (Exception e) { e.printStackTrace(); } } }
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("接收到服务器:\t"+info);
30
        } catch (Exception e) {
31
            e.printStackTrace();
32
        }
33
    }
34
}
35
 
          























转载于:https://www.cnblogs.com/xuxaut-558/p/10047888.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值