Java–网络编程–UDP与URL
初识UDP
package com.zy.net;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class StudyUdpClient {
public static void main(String[] args) {
try {
initUdpClient();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void initUdpClient() throws Exception {
DatagramSocket datagramSocket = new DatagramSocket();
InetAddress IP = InetAddress.getByName("localhost");
int port = 9090;
String msg = "你好啊,服务器!";
DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,IP,port);
datagramSocket.send(packet);
datagramSocket.close();
}
}
package com.zy.net;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class StudyUdpServer {
public static void main(String[] args) {
try {
initUdpServer();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void initUdpServer() throws Exception{
DatagramSocket socket = new DatagramSocket(9090);
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
socket.receive(packet);
System.out.println(packet.getAddress().getHostAddress());
System.out.println(new String(packet.getData(), 0, packet.getLength()));
socket.close();
}
}
UDP循环发送消息
package com.zy.net;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
public class StudyUdpSender {
public static void main(String[] args) {
try {
initUdpSend();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void initUdpSend() throws Exception{
DatagramSocket socket = new DatagramSocket(8888);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while(true){
String data = reader.readLine();
byte[] datas = data.getBytes();
DatagramPacket packet = new DatagramPacket(datas,0,datas.length,
new InetSocketAddress("localhost",6666));
socket.send(packet);
if("bye".equals(data)){
break;
}
}
reader.close();
socket.close();
}
}
package com.zy.net;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class StudyUdpReceiver {
public static void main(String[] args) {
try {
initUdpReceive();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void initUdpReceive() throws Exception{
DatagramSocket socket = new DatagramSocket(6666);
while (true){
byte[] container = new byte[1024];
DatagramPacket packet = new DatagramPacket(container,0,container.length);
socket.receive(packet);
byte[] data = packet.getData();
String receiveData = new String(data, 0, packet.getLength());
System.out.println(receiveData);
if("bye".equals(receiveData)){
break;
}
}
socket.close();
}
}
UDP多线程实现实时聊天
package com.zy.net.chat;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class StudyUdpChatSender implements Runnable {
private DatagramSocket socket = null;
private BufferedReader reader = null;
private int fromPort;
private String toIp;
private int toPort;
public StudyUdpChatSender(int fromPort, String toIp, int toPort) {
this.fromPort = fromPort;
this.toIp = toIp;
this.toPort = toPort;
try {
this.socket = new DatagramSocket(this.fromPort);
this.reader = new BufferedReader(new InputStreamReader(System.in));
} catch (SocketException e) {
e.printStackTrace();
}
}
public void initUdpChatSend() throws Exception{
while(true){
String data = reader.readLine();
byte[] datas = data.getBytes();
DatagramPacket packet = new DatagramPacket(datas,0,datas.length,
new InetSocketAddress(toIp,toPort));
socket.send(packet);
if("bye".equals(data)){
break;
}
}
reader.close();
socket.close();
}
@Override
public void run() {
try {
initUdpChatSend();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.zy.net.chat;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class StudyUdpChatReceiver implements Runnable {
private DatagramSocket socket = null;
private String msgFrom;
private int port;
public StudyUdpChatReceiver(String msgFrom, int port) {
this.msgFrom = msgFrom;
this.port = port;
try {
this.socket = new DatagramSocket(this.port);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void initUdpChatReceive() throws Exception{
while (true){
byte[] container = new byte[1024];
DatagramPacket packet = new DatagramPacket(container,0,container.length);
socket.receive(packet);
byte[] data = packet.getData();
String receiveData = new String(data, 0, packet.getLength());
System.out.println(msgFrom+":"+receiveData);
if("bye".equals(receiveData)){
break;
}
}
socket.close();
}
@Override
public void run() {
try {
initUdpChatReceive();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.zy.net.chat;
public class StudentChat {
public static void main(String[] args) {
new Thread(new StudyUdpChatSender(7777,"127.0.0.1",9999)).start();
new Thread(new StudyUdpChatReceiver("老师",8888)).start();
}
}
package com.zy.net.chat;
public class TeacherChat {
public static void main(String[] args) {
new Thread(new StudyUdpChatSender(5555,"127.0.0.1",8888)).start();
new Thread(new StudyUdpChatReceiver("学生",9999)).start();
}
}
URL
package com.zy.net;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class StudyUrl {
public static void studyUrl() throws Exception {
URL url = new URL("http://localhost:8099/helloworld/index.jsp?username=zs&password=123456");
System.out.println(url.getProtocol());
System.out.println(url.getHost());
System.out.println(url.getPort());
System.out.println(url.getPath());
System.out.println(url.getFile());
System.out.println(url.getQuery());
}
public static void urlDownloadFile() throws Exception{
URL url = new URL("https://m701.music.126.net/20230308235355/d89bf9dcb214a77e74825894fb32116f/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/23275434670/be18/af26/9247/263b2c3627e2aaa814bc2e086ff7d59e.m4a");
HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection();
InputStream is = httpUrl.getInputStream();
byte[] buffer = new byte[1024];
int len;
FileOutputStream fos = new FileOutputStream(new File("JavaProjectDemo/statics/netfile/后来的我们【五月天】.mp3"));
while ((len = is.read(buffer)) != -1){
fos.write(buffer,0,len);
}
System.out.println("下载完毕!");
fos.close();
is.close();
httpUrl.disconnect();
}
public static void main(String[] args) {
try {
studyUrl();
urlDownloadFile();
} catch (Exception e) {
e.printStackTrace();
}
}
}