Java网络编程04:UDP连接
不用连接,双方都可以发送消息,
发送端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* 不需要连接服务器
*/
public class Sender {
public static void main(String[] args) throws Exception {
/**
* 1、定义服务端的IP地址和端口号
*/
InetAddress ip = InetAddress.getByName("localhost");
int port = 9999;
/**
* 2、建立socket连接
*/
DatagramSocket socket = new DatagramSocket();
/**
* 3、建立包
*/
String msg = "您好";
DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, ip, port);
/**
* 4、发送包(无论服务端存不存在,都不会报错)
*/
socket.send(packet);
/**
* 5、关闭资源
*/
socket.close();
}
}
接收端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 还是要等待客户端的连接
*/
public class Receive {
public static void main(String[] args) throws Exception {
/**
* 1、设置开放的端口
*/
DatagramSocket socket = new DatagramSocket(9999);
/**
* 2、接收包
*/
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
/**
* 3、读取包
* packet.getData()返回字节数组,要转换为字符串输出
*/
socket.receive(packet);
System.out.println(packet.getAddress());
System.out.println(new String(packet.getData(), 0, packet.getLength()));
/**
* 4、关闭资源
*/
socket.close();
}
}
UDP多线程交互聊天
发送线程
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class Sender implements Runnable{
/**
* 定义发送方端口号、接收方IP地址、接收方端口号
*/
int fromPort;
String toIp;
int toPort;
DatagramSocket socket;
BufferedReader reader;
public Sender(int fromPort, String toIp, int toPort){
this.fromPort = fromPort;
this.toIp = toIp;
this.toPort = toPort;
try {
socket = new DatagramSocket(fromPort);
/**
* 由控制台读取数据发送消息
*/
reader = new BufferedReader(new InputStreamReader(System.in));
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true) {
try {
String data = reader.readLine();
byte[] buffer = data.getBytes();
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length, new InetSocketAddress(toIp, toPort));
socket.send(packet);
if (data.equals("bye")) {
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
socket.close();
}
}
接收线程
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Receiver implements Runnable{
int port;
String fromName;
DatagramSocket socket;
public Receiver(int port, String fromName){
this.port = port;
this.fromName = fromName;
try {
socket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true) {
try {
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
socket.receive(packet);
String data = new String(packet.getData(), 0, packet.getLength());
System.out.println(fromName + ":" + data);
if (data.equals("bye")){
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
socket.close();
}
}
Student
public class Student {
public static void main(String[] args) {
new Thread(new Sender(6666, "localhost", 7777)).start();
new Thread(new Receiver(8888, "老师")).start();
}
}
Teacher
public class Teacher {
public static void main(String[] args) {
new Thread(new Sender(9999, "localhost", 8888)).start();
new Thread(new Receiver(7777, "学生")).start();
}
}
URL
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class Main {
public static void main(String[] args) {
try {
URL url = new URL("https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ");
/**
* 获取URL的信息
*/
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());
/**
* 下载URL资源,要转换为http
*/
try {
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
FileOutputStream file = new FileOutputStream("file.png");
byte[] buffer = new byte[1024];
int count;
while ((count = inputStream.read(buffer)) != -1){
file.write(buffer, 0, count);
}
file.close();
inputStream.close();
urlConnection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}