其本质是socket对象
什么是网络:
网络是由节点和连线构成,表示诸多对象及其相互联系。在计算机世界里,⽹络就是⼀种辅助双⽅或者多⽅能够连接在⼀起的⼯具。
为什么使用网络
就是为了联通多⽅然后进⾏通信⽤的,即把数据从⼀⽅传递给另外⼀⽅前⾯的学习编写的程序都是单机的,即不能和其他电脑上的程序进⾏通信为了让在不同的电脑上运⾏的软件,之间能够互相传递数据,就需要借助⽹络的功能。
协议
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
端口(port)
设备与外界通讯交流的出入口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。
常见知名端口:
80端⼝分配给HTTP服务
21端⼝分配给FTP服务
443 端口分配给HTTPS服务
动态端口
动态端⼝的范围是从1024到65535,之所以称为动态端⼝,是因为它⼀般不固定分配某种服务,⽽是动态分配。
动态分配是指当⼀个系统进程或应⽤程序进程需要⽹络通信时,它向主机申请⼀个端⼝,主机从可⽤的端⼝号中分配⼀个供它使⽤。当这个进程关闭时,同时也就释放了所占⽤的端⼝号。
查看端口
⽤“netstat”查看端⼝状态
什么是IP地址
IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
ip地址的分类
用来在网络中标记一台电脑的一串数字,在网络中的唯一性
ip地址的分类
1、IPv4
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
2、IPv6
创建socket
在Java中使⽤java.net包中的类实现socket的创建:
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;
# 创建一个基于UDP协议的Socket对象
DatagramSocket ds = new DatagramSocket();
# 创建一个基于TCP协议的Socket客户端对象
Socket socket = new Socket("127.0.0.1", 8080);
# 创建一个基于TCP协议的Socket服务端对象
ServerSocket ss = new ServerSocket(8080);
创建⼀个tcp socket(TCP套接字):
import java.net.ServerSocket;
import java.net.Socket;
# 创建一个基于TCP协议的Socket客户端对象
Socket socket = new Socket("127.0.0.1", 8080);
# 创建一个基于TCP协议的Socket服务端对象
ServerSocket ss = new ServerSocket(8080);
创建⼀个tcp socket(UDP套接字):
import java.net.DatagramSocket;
# 创建一个基于UDP协议的Socket对象
DatagramSocket ds = new DatagramSocket();
1、无连接
2、不可靠
3、不安全
追求速度的网络协议
DatagramSocket对象是java封装的基于UDP网络协议socket(套接字)
DatagramPacket进行数据的封装和解封装
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class TestUDPSendData {
public static void main(String[] args) {
DatagramSocket ds = null;
try {
ds = new DatagramSocket(8888);
String str = "lbs";
DatagramPacket dp = new DatagramPacket(str.getBytes("gbk"), str.getBytes("gbk").length,
new InetSocketAddress("192.168.31.23", 8080));
ds.send(dp);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null)
ds.close();
}
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class TestUDPSendData {
public static void main(String[] args) {
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
String str = "lbs";
DatagramPacket dp = new DatagramPacket(str.getBytes("gbk"), str.getBytes("gbk").length,
new InetSocketAddress("192.168.31.23", 8080));
ds.send(dp);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null) ds.close();
}
}
}
package com.openlab.day20.network;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class TestUDPSendData {
public static void main(String[] args) {
DatagramSocket ds = null;
try {
ds = new DatagramSocket(new InetSocketAddress("192.168.31.23", 2233));
String str = "lbs";
DatagramPacket dp = new DatagramPacket(str.getBytes("gbk"), str.getBytes("gbk").length,
new InetSocketAddress("192.168.31.23", 8080));
ds.send(dp);
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null) ds.close();
}
}
}
版本号:包编号:发送者姓名:发送者机器名:命令字:消息
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Scanner;
public class TestUDPSendDataToFeiqiu {
public static void main(String[] args) {
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
java.util.Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("请输入您要发送的数据:");
String str = sc.nextLine();
if (str.equalsIgnoreCase("exit")) {
break;
}
DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length,
new InetSocketAddress("127.0.0.1", 2425));
ds.send(dp);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null) ds.close();
}
}
}
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Scanner;
public class TestUDPReviceData {
public static void main(String[] args) {
new TestUDPReviceData().begin();
}
public void begin() {
DatagramSocket ds = null;
try {
ds = new DatagramSocket(9999);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
new Thread(new SendInfo(ds)).start();
while(true) {
ds.receive(dp);
System.out.println("接受到值"+ dp.getAddress().getHostAddress() +"传递过来的值");
String str = new String(buf, 0, buf.length, "gbk");
System.out.println("---->"+ str);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null) ds.close();
}
}
class SendInfo implements Runnable {
private DatagramSocket ds;
private DatagramPacket dp;
public SendInfo(DatagramSocket ds) {
this.ds = ds;
}
@Override
public void run() {
java.util.Scanner sc = new Scanner(System.in);
while(true) {
String msg = sc.nextLine();
try {
this.dp = new DatagramPacket(msg.getBytes("gbk"), msg.getBytes("gbk").length, new InetSocketAddress("192.168.31.23", 8080));
this.ds.send(dp);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
TCP:传输控制协议
安全
可靠
有连接的
点对点
长连接
tcp服务器
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTcp {
public static void main(String[] args) {
ServerSocket ss = null;
PrintWriter out = null;
try {
ss = new ServerSocket(8888);
System.out.println("等待客户端连接上来……");
while(true) {
Socket socket = ss.accept();
System.out.println(socket.getInetAddress().getHostAddress() +"连接上来了");
// 注意PrintWriter第二个参数,必须为true,否则会缓冲数据,导致数据无法发送
out = new PrintWriter(socket.getOutputStream(), true);
out.println("欢迎访问本系统");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Tcp客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
Socket s = null;
BufferedReader br = null;
try {
s = new Socket("192.168.31.23", 8888);
// s = new Socket("127.0.0.1", 8888);
br = new BufferedReader(new
InputStreamReader(s.getInputStream()));
System.out.println(br.readLine());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}