网络编程
-
网络三要素
- ip
- 网络设备的唯一标识。 【电脑、手机…】
- 端口
- 程序的唯一标识
- 协议
- 数据传输的规则
- ip
-
udp通信
-
特点
- 无连接,不可靠通信
-
接收端
-
流程
- 先创建一个接收端,【一定要指定端口】
- 准备数据包
- 接收数据
-
方法
-
\1. DatagramSocket socket = new DatagramSocket(端口);
-
2.DatagramPacket(字节数组, 数组长度 )
-
\3. 调用 DatagramSocket的receive(数据包)
-
4.调用DatagramPacket的getLength()获取接收到的数据的长度
package com.itheima.demo02_udp相互发送数据; import java.net.*; public class Receiver { public static void main(String[] args) throws Exception { // 1.先创建一个接收端 DatagramSocket receiver = new DatagramSocket(9526); // 2.准备一个数据包,用于存放接收的数据 while (true) { SocketAddress remoteSocketAddress = receiver.getRemoteSocketAddress(); System.out.println(remoteSocketAddress); byte[] bytes = new byte[1024 * 8]; DatagramPacket packet1 = new DatagramPacket(bytes, bytes.length); // 3.接收数据 receiver.receive(packet1); String s = new String(bytes , 0 , packet1.getLength()); System.out.println("接收端接收到的数据是:" + s); // ----4.---- 我们需要发送数据 // 5.创建一个数据包 byte[] bytes1 = "我很好,你呢?".getBytes(); DatagramPacket packet2 = new DatagramPacket(bytes1 , bytes1.length , InetAddress.getByName("127.0.0.1"),9527); // 6.发送数据 receiver.send(packet2); System.out.println("发送成功~"); } } }
-
-
-
发送端
-
流程
- 先创建一个发送端 【端口可指定,可不指定】
- 准备数据包
- 发送数据
-
方法
-
\1. DatagramSocket socket = new DatagramSocket(端口);
-
2.DatagramPacket(内容字节数组, 数组长度 ,接收端的ip, 接收端的端口 )
-
\3. 调用 DatagramSocket的send(数据包)
package com.itheima.demo02_udp相互发送数据; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class Sender { public static void main(String[] args) throws Exception { // 1. 先创建一个发送端 ==> 这里需要发送数据,也要接收数据 DatagramSocket sender = new DatagramSocket(9527); // 2.创建一个数据包 while (true) { byte[] bytes = "小明,你好吗?".getBytes(); DatagramPacket packet1 = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"), 9526); // 3.发送数据 sender.send(packet1); System.out.println("发送数据成功~"); // ---4.我们需要接收数据 // 5.我们需要创建一个新的数据包,用于接收数据 byte[] bytes2 = new byte[1024 * 8]; DatagramPacket packet2 = new DatagramPacket(bytes2 , bytes2.length); // 6.调用receiver的方法接收数据 sender.receive(packet2); String s = new String(bytes2 , 0 , packet2.getLength()); System.out.println("接收到的数据是:" + s); } } }
-
-
-
-
tcp 通信
-
特点
- 面向连接,可靠通信
-
客户端
-
Socket s = new Socket(对方ip, 端口)
-
获取输入流
- getInputStream()
-
获取输出流
-
getoutputStream()
package com.itheima.demo04_tcp相互发送数据; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner; public class Client { public static void main(String[] args) throws Exception { // 1.创建一个 Socket Socket socket = new Socket("127.0.0.1", 9527); // 2.创建键盘录入对象,录入一段内容 Scanner sc = new Scanner(System.in); System.out.println("请输入一段发送给服务端的内容:"); String s = sc.next(); // 3.要从socket里面去获取一个输出流,把上面的内容写出去 OutputStream os = socket.getOutputStream(); os.write(s.getBytes()); // 4.------接收服务端发送过来的数据 // 5.从socket里面获取一个输入流 InputStream is = socket.getInputStream(); // 6.读取数据 byte[] bytes = new byte[1024 * 8]; int length = is.read(bytes); System.out.println("接收到了服务器发送过来的数据:" + new String(bytes, 0, length)); is.close(); os.close(); socket.close(); } }
-
-
-
服务端
- ServerSocket server = new ServerSocket(端口)
- 接收连接方法
- Socket accept()
-
package com.itheima.demo04_tcp相互发送数据;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
// 1.创建一个服务器对象
ServerSocket server = new ServerSocket(9527);
// 2.接收对方的socket
Socket socket = server.accept();
// 3.从socket里面获取输入流,读取对方发送过来的数据
InputStream is = socket.getInputStream();
byte[] bytes = new byte[1024 * 8];
int length = is.read(bytes);
System.out.println("接收到了小黑子发送过来的数据:" + new String(bytes, 0, length));
// 4.从socket里面获取输出流,把一段信息写过去
OutputStream os = socket.getOutputStream();
os.write("小黑子你好,我收到了你的消息~over".getBytes());
// 5.关流
os.close();
is.close();
socket.close();
server.close();
}
}