------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ----_wsq_30589177的博客-程序员秘密

黑马程序员   网络编程
网络编程三要素:IP  寄信的地址
                          端口    相当于收件人.在计算机上,可以同时有多个程序接收网络数据,每个程序都会占用至少一个端口.
                          协议 双方都要看得懂  
一.IP:IP地址是计算机在互联网上,唯一标示此计算机的地址;
1.所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。
    按照TCP/IP规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,
    就是4个字节。例如一个采用二进制形式的IP地址是:
 "11000000101010000000000101100100",这么长的地址,
 人们处理起来也太费劲了。为了方便人们的使用,IP地址经常被写成十进制的形式,
 中间使用符号“.”分开不同的字节。于是,上面的IP地址可以表示为“10.0.0.1”。
 IP地址的这种表示法叫做"点分十进制表示法",这显然比1和0容易记忆得多。
 
 192.168.0.1:(十进制):四段,每段的范围:0--255
 11000000.10101000.00000000.00000001:(二进制)
 
 内部使用二进制存储:
 最小值:00000000.00000000.00000000.00000000:0.0.0.0
 最大值:11111111.11111111.11111111.11111111:255.255.255.255(256 * 256 * 256 * 256)
2.B:IP地址的组成
IP地址 = 网络号码  + 主机地址


A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码:192.0.0.1 -- 192.255.255.255(256 * 256 * 256)
B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码:192.168.0.1 -- 192.168.255.255(256 * 256)
C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码:192.168.0.1 -- 192.168.0.255(256)
 
 作用:
 例如以下三个IP:
 1.192.168.0.1
 2.192.168.0.20
 3.192.168.2.30
 
 以上三台计算机可以怎样进行互相访问:
 1.子网掩码:255.255.255.0:
  二进制:11111111.11111111.11111111.00000000:子网掩码中,全部是1的,代表"网络号码"。前三段是网络号码
  1和2可以互访;
 2.子网掩码:255.255.0.0:11111111.11111111.00000000.00000000:
  1、2、3可以互访;
3.特殊地址:
127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1  
ping:在"命令提示符"下,可以使用ping命令测试网络连接;
格式:
>ping 192.168.0.30(IP地址)
>ping www.baidu.com(域名)
4.DOS命令 ipconfig:查看本机IP地址
5. xxx.xxx.xxx.0 网络地址
xxx.xxx.xxx.255 广播地址
6.
A类 1.0.0.1---127.255.255.254(1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址)(2)127.X.X.X是保留地址,用做循环测试用的。
B类 128.0.0.1---191.255.255.254172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
C类 192.0.0.1---223.255.255.254192.168.X.X是私有地址
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254

二.端口:
1.物理端口:网卡口;
2.逻辑端口:由操作系统定义并维护。Windows下,逻辑端口的范围:0 -- 65535

我们讲的端口就是"逻辑端口":

3.每个网络应用程序都至少占用1个逻辑端口,也可以同时占用多个;
4.每个端口,同一时刻,只能被一个应用占用。
5.有效端口:0~65535,其中0~1024系统使用或保留端口。

三.协议:
1.网络传输协议:UDP,TCP,HTTP,FTP......
我们涉及到的:UDP协议,TCP协议:
2.UDP:
1).先将数据打包;
2).不需要连接;可以没有接收方,发送方直接发送即可;
3).由于不需要建立连接,不安全的,速度快;
4).发送的数据大小有限制:64K
类似于:广播、电视

3.TCP:
1).面向连接的;必须要有接收方;
2).安全,速度慢--连接时,需要双方发送握手信息;
类似于:打电话;
InetAddress 类:此类表示互联网协议 (IP) 地址。 
 * 
 * 要掌握的功能
获取任意主机:InetAddress static getByName(String hostName):

主机名:getHostName():
主机Ip地址:getHostAddress()


 */
public class Demo {
public static void main(String[] args) throws Exception {
InetAddress add = InetAddress.getByName("Lenovo-PC");

//获取主机名
String hostName = add.getHostName();
String ip = add.getHostAddress();
System.out.println("计算机名:" + hostName + " IP : " + ip);

}
}
UDP:1.将数据及资源和目的封装到数据包中,不需要建立连接
         2.每个数据包的大小不超过64k
         3.因无连接,是不可靠协议
         4.不需要建立连接,速度快
UDP的发送与接收
              UDP的发送:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;


/*
 * UDP的发送方:
 * 
 * 1.实例化一个Socket:DatagramSocket
 * 2.准备数据:
 * 1).目标IP;
 * 2).目标端口;
 * 3).信息内容;
 * 3.封装数据报:DatagramPacket
 * 4.调用DatagramSocket的send()方法,发送:数据报
 */
public class Demo {
public static void main(String[] args) throws IOException {
// 1.实例化一个Socket:DatagramSocket
DatagramSocket sendSocket = new DatagramSocket();
// 2.准备数据:
InetAddress ip = InetAddress.getByName("Lenovo-PC");
int port = 8888;
byte[] byteArray = "你好,这里是通过UDP发送的数据,请接收.....".getBytes();
// 3.封装数据报:DatagramPacket
DatagramPacket packet = new DatagramPacket(byteArray, 
byteArray.length,
ip, port);
//4.发送数据
sendSocket.send(packet);

//5.释放资源
sendSocket.close();
System.out.println("信息已发送!");


}
}
UDP的接收
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;


/*
 * UDP的接收方:
 * 
 * 1.建立Socket对象:DatagramSocket(监听端口)
 * 2.建立一个空的byte[]数组,准备接收数据;
 * 3.使用byte[]数组建立一个空的DatagramPacket对象,用于获取连接;
 * 4.调用DatagramSocket的receive()等待信息;
 * 5.一旦有信息火来,receive()将会返回,并且将信息填充到数据报对象中;
 * 6.通过数据报对象获取信息;
 */
public class Demo {
public static void main(String[] args) throws IOException {
//1.建立Socket对象:DatagramSocket(监听端口)
DatagramSocket socket = new DatagramSocket(8888);
//2.建立一个空的byte[]数组,准备接收数据;
byte[] byteArray = new byte[1024];
//3.使用byte[]数组建立一个空的DatagramPacket对象,用于获取连接;
DatagramPacket packet = new DatagramPacket(byteArray,byteArray.length);
//4.调用DatagramSocket的receive()等待信息;
System.out.println("等待信息.....");
socket.receive(packet);//程序将在这里阻塞,等待信息,如果有信息来,此方法将返回,并将数据填充到packet中
System.out.println("有信息到达!");
//6.通过数据报对象获取信息;
//IP地址:
String ip = packet.getAddress().getHostAddress();
//信息:
byte[] infoArray = packet.getData();//获取信息内容
String str = new String(infoArray,0,packet.getLength());
System.out.println("接收方接收到信息:IP:" + ip + " 内容:" + str);

//释放资源
socket.close();
}
}
TCP:    1.建立连接形成传输数据的通道
             2.在连接中进行大数据量传输
             3.通过三次握手完成链接,是可靠协议
             4.必须建立链接,效略会稍低
用UDP编写一个聊天程序,需要两个线程,一个收一个发
因为首发动作不一致,所以要定义两个run方法,并分别封装到不同的类中.
TCP分客户端Socket和服务端ServerSocket

TCP的发送与接收
      TCP的发送:
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;


/*
 * TCP的发送端:
 * 
 * 面向连接的,一定要有接收方存在
 * 
 * 步骤:
 * 
 * 1.实例化一个Socket:java.net.Socket
 * 构造方法:Socket(String host, int port)
 * 2.因为要发送,通过Socket对象获取一个输出流:
 * 3.通过输出流输出信息;
 * 4.释放资源;
 * 
 */
public class Send {
public static void main(String[] args) throws IOException{
//1.实例化一个Socket:java.net.Socket
Socket socket = new Socket("192.168.38.91",8888);
//2.因为要发送,通过Socket对象获取一个输出流:
OutputStream out = socket.getOutputStream();
//3.一次输出一个字节数组
out.write("你好,这里是通过TCP发送的数据,你能收到吗?".getBytes());
//4.释放资源
out.close();
socket.close();
}
}
TCO
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_30589177/article/details/47665093

智能推荐

CentOS7配置国内yum源与epel源_JZU大博的博客-程序员秘密

国内yum源1.首先进入/etc/yum.repos.d/目录下,新建一个repo_bak目录,用于保存系统中原来的repo文件[[email protected] ~]# cd /etc/yum.repos.d/[[email protected] yum.repos.d]# mkdir repo_bak[[email protected] yum.repos.d]# mv *.repo repo_bak/2.在CentOS中配置使用网易和阿里的开源镜像到网易和阿里开源镜像站点下载系统对应版本的repo

在.NET 6.0上使用Kestrel配置和自定义HTTPS_dotNET跨平台的博客-程序员秘密

本章是《定制ASP NET 6.0框架系列文章》的第四篇。在本章,我们将学习ASP.NET Core的Kestrel配置和自定义HTTPS,好我们开始正文。在ASP.NET Core中,默认情况下HTTPS处于打开状态,这个不是问题,我们无需禁用它。因为如果你的服务是在防火墙后面,是属于后台服务,不对外网提供服务,启用HTTPS也是有意义的。通常,在Windows上,启用...

Log:日志选型调研『一』_偕臧x的博客-程序员秘密_日志数据库选型

文章目录关联背景日志库调研Google 关键词表格总结log4cxxLog4cpplog4clog4cplusgoogle glogz-logspdlogc-logsyslog-ngGitHub 搜索GItHub 村外有村总结成系列地址简 述: 准备在个人的项目中添加 Log 日志模块,便于项目日后定位和调试。因前面数月,有感受到了日志的威力,故决定调研后选取一个合适的日志模块 spdlog 。最后意外的惊喜发现,检索需要一点技巧,可遇村外有村,好风凭借力。本文初发于 “偕臧的小站”,同步转载

gcc教程(转)_xpp02的博客-程序员秘密

gcc目 录gccmakefile写法 gcc_egcs使用 gdb使用 gcc常用选项对代码的影响一般情况 -O 编译选项 -O2 编译选项 -fomit-frame-pointer 编译选项 -fomit-frame-pointer &amp;amp;&amp;amp; -O2 -fPIC 编译选项 -static 编译选项 AT&amp;...

Msp430概述_hust我是船长的博客-程序员秘密_msp430

总结一下MSP430给我的印象吧,感觉他就是一个迷你型的arm1:MSP430采用的是精简指令,他只有27条核心的汇编指令,这一点和arm相同,arm同样是采用精简指令,而80c51采用的是冗余指令,执行起来要复杂很多 寄存器编2:MSP430他有16个寄存器,这好像和arm也一样,但是略有不同的是,他的 r0 到 r3 是特殊功能寄存器,其中ro是程序指针(PC); r1是堆

Oracle数据库远程维护工具-oratools_wqlixueyang的博客-程序员秘密_oradgtool

为何会做这个工具 因为日常工作中琐事较多,其中较多的工作都是重复的,可复制的,所以就去写一个维护的工具,来帮助自己解决重复性高而且复杂的工作。oratools的介绍 此工具使用远程连接的方式与数据库连接,在功能列表中可以选择对应的功能,实现对数据库日常维护的需求,已实现的功能如下(功能现在已每天1~2个的速度增长): 1. 查询表、索引属性 2. 查询ASM磁盘组信息 3. 查询UNDO状态 4. ...

随便推点

HDU 2093 考试排名 (水题)_xcatf的博客-程序员秘密

考试排名Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19617Accepted Submission(s): 6788Proble...

OpenCV中判断点在矩形中的方法_qiao_lili的博客-程序员秘密_opencv 检测点在矩形内部

目录1.问题2.思路3.实现4.资料1.问题如图1.1所示,有红色和蓝色两个点,如何判断点相对于矩形的位置呢?2.思路首先,我们知道OpenCV中有一个函数:pointPolygonTest()。它的作用是判断一个点是否在轮廓中,基本用法如下:C++: double pointPolygonTest(InputArray contour, Point2f p...

浅析几种HID攻击_合天网安实验室的博客-程序员秘密

本文原创作者:MR.zhang原创投稿详情:重金悬赏 | 合天原创投稿等你0x01 WhatIs HID?HID全称为HumanInterfaceDevice直译为人类接口设备,也被...

关于emgucv的书_【Emgu】一起学EmguCV(一)配置与使用_weixin_39732991的博客-程序员秘密

首先先介绍一下OpenCV,OpenCV的全称是:Open Source Computer Vision Library,OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通...

Android实验_青釉lady的博客-程序员秘密_android课程实验

实验一  音乐播放器一、实验目的1、掌握Activity工作机制。2、掌握ListView、MediaPlayer等用法。二、实验内容设计一个音乐播放器,用ListView显示手机中MP3格式音乐,支持播放、暂停、继续、上一首、下一首等功能。三、工作流程图四、程序源代码1、布局页面在res的layout的activity_music.xml中&amp;lt;?xml version=&quot;1.0&quot; encod...

LATEX(2)增大表格名称与表格间距_zlkeepgoing的博客-程序员秘密_latex 表格名称

LaTeX的表格环境是默认把表格名称放在表格底部的,如果我们把表格名称放置在表格开头就会发现名称与表格的距离十分接近,非常不好看,就像下图显示的一样: 但是我们如果习惯把表格名称放置在表头又该怎么办呢?下面给大家提供两种方法。 版本一:在文中使用命令”\caption”前添加增大间距的命令,具体如下:\begin{table}[H]\centering\setlength{\aboveca

推荐文章

热门文章

相关标签