网络编程:在通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换
网络编程三要素:
IP地址:要想在网络中的计算机互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定接收数据的计算机和发送数据的计算机,IP就是标识。
端口:网络通信本质是应用程序的通信,端口可以唯一标识设备中的应用程序,端口就是应用程序的标识
协议:通过计算机网络可以实现多台计算机的连接,位于同一网络中的计算机在进行连接的时候必须遵守一定的规则,在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据 的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交互,常见的有TCP和UDP协议。
每次连接的时候都需要”三次握手“
InetAddress
static InetAddress getByName(String host)确定主机名称的IP地址。主机名称可以是机器名,也可以是IP地址
InetAddress byName = InetAddress.getByName(host);
getHostName:获取该IP地址的主机名
String hostName = byName.getHostName();
getHostAddress:返回文本显示中的IP地址字符串
String hostAddress = byName.getHostAddress();
UDP通信
原理:UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象因此对于基于UDP协议的通信双方,没有所谓的客户端和服务的概念
UDP发送数据
Java提供了DatagramSocket类作为基于UDP协议的Socket
步骤:
1、创建发送端的Socket对象DatagramSocket
DatagramSocket socket = new DatagramSocket();
2、创建数据,将数据打包
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line=null;
while ((line=reader.readLine())!=null) {
byte[] lineBytes = line.getBytes();
3、调用DatagramSocket对象发送数据
DatagramPacket packet = new DatagramPacket(lineBytes, lineBytes.length, InetAddress.getByName("IP地址"),10000);//10000是端口号
socket.send(packet);
}
4、关闭发送端
socket.close();
UDP接收数据
1、创建DatagramSocket对象:使用代参,传入端口
DatagramSocket receiveSocket = new DatagramSocket(10000);
2、创建数据包,接收数据
while (true){
byte[] bytes = new byte[1024];
3、接收数据
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
//接收
receiveSocket.receive(packet);
//解析数据包
System.out.println(new String(packet.getData(),0,packet.getLength()));
4、关闭接收
receiveSocket.close();
}
TCP通信
TCP发送数据
1、创建客户端Socket对象
Socket socket = new Socket("192.168.11.236",10000);
2、写数据
OutputStream outputStream = socket.getOutputStream();
outputStream.write("Hello!".getBytes());
outputStream.write("你好呀".getBytes());
3、关闭
socket.close();
TCP接收数据
1、创建ServerSocket对象
ServerSocket serverSocket = new ServerSocket(12345);
2、监听客户端、返回Socket对象
Socket accept = serverSocket.accept();
3、得到数据
InputStream inputStream = accept.getInputStream();
byte[] bytes = new byte[1024];
int line;
while ((line=inputStream.read(bytes))!=-1){
String s = new String(bytes, 0, line);
System.out.println(s);
}
4、关闭
serverSocket.close();