Java基础:网络编程UDPTCP详解
概述
什么是网络编程?
Java中提供解决方案
基本通信架构CS/BS
通信三要素
IP地址-InetAddress
InetAddress
// 目标:
// 1.获取本机ip对象
InetAddress ip = InetAddress.getLocalHost();
System.out.println(ip.getHostAddress());
System.out.println(ip.getHostName());// 2.获取指定ip对象
InetAddress ip2 = InetAddress.getByName("www.baidu.com");
System.out.println(ip2.getHostAddress());
System.out.println(ip2.getHostName());// 3.判断本机与改主机是否联通:ping
boolean reachable = ip2.isReachable(5000);// 可做预警
System.out.println(reachable);
端口号
2协议UDP/TCP
UDP
UDP通信
DatagramSocket
public class Server {public static void main(String[] args) throws Exception {// 目标:服务端// 1.创建接收端DatagramSocket socket = new DatagramSocket(8888);// 2.创建数据包对象(接收数据)byte[] bytes = new byte[1024*64];DatagramPacket packet = new DatagramPacket(bytes, bytes.length);// 3.接收数据(接收韭菜)socket.receive(packet);// 4.把数据输出// 获取本轮传输的数据多少字节int len = packet.getLength();String msg = new String(bytes, 0 , len);System.out.println(msg);// 获取发送端的ip地址与端口InetAddress ip = packet.getAddress();int port = packet.getPort();System.out.println(ip.getHostAddress() + ":" + port);// 5.关闭资源socket.close();}
}
public class Client {public static void main(String[] args) throws Exception {// 目标:客户端// 1.创建发送对象DatagramSocket socket = new DatagramSocket();// 2.创建数据包对象String msg = "你好,我是客户端";byte[] data = msg.getBytes();DatagramPacket packet =new DatagramPacket(data, data.length, InetAddress.getLocalHost(), 8888);// 3.发送数据socket.send(packet);// 4.关闭资源socket.close();}
}
UDP多发多收
略
TCP
TCP通信
Socket
/*** 目标:完成TCP通信:实现1发1收*/
public class Client {public static void main(String[] args) throws Exception {System.out.println("客户端启动成功!!!");// 1.创建客户端对象Socket socket = new Socket("127.0.0.1", 8888);// 2.从通信管道中获取字节输出流,用来发送数据给服务器OutputStream os = socket.getOutputStream();// 3.把低级输出流转为数据输出流DataOutputStream dos = new DataOutputStream(os);dos.writeUTF("在一起,好吗?");dos.close();// 4.释放资源socket.close();}
}
/*** 目标:TCP服务端开发*/
public class Server {public static void main(String[] args) throws Exception {System.out.println("服务端启动成功!!!");// 1.创建一个服务器对象,绑定8888端口ServerSocket ss = new ServerSocket(8888);// 2.等待客户端连接Socket socket = ss.accept();// 3.从通信管道中获取字节输入流,读取数据InputStream is = socket.getInputStream();// 4.把字节输入流包装成字符输入流DataInputStream dis = new DataInputStream(is);// 5.读取数据String msg = dis.readUTF();System.out.println(msg);// 获取客户端信息System.out.println(socket.getRemoteSocketAddress());// 关闭资源dis.close();socket.close();}
}
TCP多发多收
TCP同时接收多个客户端(多线程)