网络编程三要素
01.三要素
A:IP地址
B:端口
C:协议
IP地址:网络中计算机的唯一标识
IP地址的组成:网络号段+主机号段
A类:第一号段为网络号段+后三段的主机号段
一个网络号:256*256*256 = 16777216
B类:前二号段为网络号段+后二段的主机号段
一个网络号:256*256 = 65536
C类:前三号段为网络号段+后一段的主机号段
一个网络号:256
IP地址的分类:
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.254 172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
C类 192.0.0.1---223.255.255.254 192.168.X.X是私有地址
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254
两个DOS命令:
ipconfig 查看本机ip地址
ping 后面跟ip地址。测试本机与指定的ip地址间的通信是否有问题
特殊的IP地址:
127.0.0.1 回环地址(表示本机)
x.x.x.255 广播地址
x.x.x.0 网络地址
端口号:正在运行的程序的标识
有效端口:0~65535,其中0~1024系统使用或保留端口。
协议:通信的规则
UDP:
把数据打包
数据有限制
不建立连接
速度快
不可靠
TCP:
建立连接通道
数据无限制
速度慢
可靠
Socket通信原理
UDP协议发送和接收
01.图解
![UDP协议的发送和接收图解](https://img-blog.csdn.net/20170817103836127?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2lybF9uaW5l/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
02.InetAddress类的概述
public static InetAddress getByName(String host):根据主机名或者IP地址的字符串表示得到IP地址对象
public class cb {
public static void main(String[] args) throws IOException {
InetAddress address=InetAddress.getByName("FAH-PC");
String ipString=address.getHostAddress();
System.out.println(ipString);
}
}
03.UDP协议的接收和发送代码
A.接收代码,先有接收代码,发送才有目的地
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
// 创建接收端的Socket对象
DatagramSocket ds = new DatagramSocket(12345);
// 创建一个包裹
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
// 接收数据
ds.receive(dp);
// 解析数据
String ip = dp.getAddress().getHostAddress();
String s = new String(dp.getData(), 0, dp.getLength());
System.out.println("from " + ip + " data is : " + s);
// 释放资源
ds.close();
}
}
B.发送代码
public class SendDemo {
public static void main(String[] args) throws IOException {
// 创建发送端的Socket对象
DatagramSocket ds = new DatagramSocket();
// 创建数据并打包
byte[] bys = "helloworld".getBytes();
DatagramPacket dp = new DatagramPacket(bys, bys.length,
InetAddress.getByName("172.20.163.44"), 12345);
// 发送数据
ds.send(dp);
// 释放资源
ds.close();
}
}
04.TCP协议接收和发送数据
/*
* TCP协议接收数据:
* A:创建接收端的Socket对象
* B:监听客户端连接。返回一个对应的Socket对象
* C:获取输入流,读取数据显示在控制台
* D:释放资源
*/
public class tcpreceive {
public static void main(String[] args) throws IOException{
ServerSocket ss=new ServerSocket(4445);
Socket s=ss.accept();
InputStream is=s.getInputStream();
byte[] bytes=new byte[1024];
String st=new String(bytes, 0, is.read(bytes));
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"-------"+st);
s.close();
}
}
/*
* TCP协议发送数据:
* A:创建发送端的Socket对象
* 这一步如果成功,就说明连接已经建立成功了。
* B:获取输出流,写数据
* C:释放资源
*
* 连接被拒绝。TCP协议一定要先看服务器。
* java.net.ConnectException: Connection refused: connect
*/
public class tcpsend {
public static void main(String[] args) throws IOException {
Socket so=new Socket("172.20.163.41",4445);
OutputStream os=so.getOutputStream();
os.write("helloworld".getBytes());
so.close();
}
}