当前位置: 首页 > news >正文

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
www.baidu.com
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

          





















来自为知笔记(Wiz)


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

相关文章:

  • Java Socket实战之四:传输压缩对象
  • Python csv模块读取基本操作
  • PHP语法之如何获取变量的名称
  • vue-cli3搭建项目
  • Spark ShuffleDependency Shuffle依赖关系
  • 第一课_设备树的引入与体验(基于linux4.19内核版本)
  • 微软宣布开源WPF、WinForms和WinUI
  • 编写目的和概述的资料搜集与分析
  • channel的高级玩法
  • SmartBear SoapUI Pro入门教程--第一次功能测试(二)
  • 【LDAP安装】在已编译安装的PHP环境下安装LDAP模块
  • Python数据可视化2018:数据可视化库为什么这么多?
  • 如何用纯 CSS 创作一个“女神来了,快让路”的动画
  • 3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)
  • ThinkPHP/---ajax 改变状态实例
  • [LeetCode] Wiggle Sort
  • CSS实用技巧干货
  • Effective Java 笔记(一)
  • in typeof instanceof ===这些运算符有什么作用
  • iOS | NSProxy
  • java概述
  • leetcode46 Permutation 排列组合
  • Otto开发初探——微服务依赖管理新利器
  • PHP 7 修改了什么呢 -- 2
  • Vue组件定义
  • 给第三方使用接口的 URL 签名实现
  • 基于组件的设计工作流与界面抽象
  • 技术:超级实用的电脑小技巧
  • 技术胖1-4季视频复习— (看视频笔记)
  • 简析gRPC client 连接管理
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 力扣(LeetCode)21
  • 什么软件可以剪辑音乐?
  • 使用agvtool更改app version/build
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • #android不同版本废弃api,新api。
  • (12)目标检测_SSD基于pytorch搭建代码
  • (C)一些题4
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (一) springboot详细介绍
  • (转)Oracle存储过程编写经验和优化措施
  • (转)socket Aio demo
  • .java 9 找不到符号_java找不到符号
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET框架
  • @AutoConfigurationPackage的使用
  • [.net]官方水晶报表的使用以演示下载
  • [BROADCASTING]tensor的扩散机制