聊天室实现 两人都是发送也是接收方
发送线程代码
package com.cjg.netCode;
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 threadChatUdp implements Runnable{
DatagramSocket ds = null;
BufferedReader bufferedReader =null;
private String toIp;
private int toPort;
private int fromPort;
public threadChatUdp(String toIp, int toPort, int fromPort) {
this.toIp = toIp;
this.toPort = toPort;
this.fromPort = fromPort;
try {
ds= new DatagramSocket(fromPort);
bufferedReader = new BufferedReader(new InputStreamReader(System.in));
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true){
String s = null;
try {
s = bufferedReader.readLine();
byte[] bytes = s.getBytes();
int length = bytes.length;
InetSocketAddress socket = new InetSocketAddress(toIp, toPort);
DatagramPacket datagramPacket = new DatagramPacket(bytes,0,length,socket);
ds.send(datagramPacket);
if (s.equals("bye")){
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
ds.close();
}
}
接收线程代码
package com.cjg.netCode;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class udpChatRecevice implements Runnable {
DatagramSocket socket =null;
private int port;
private String msg;
public udpChatRecevice(int port,String msg) {
this.port=port;
this.msg=msg;
//创建接收端口
try {
socket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true){
try {
//接收数据
byte[] bytes = new byte[1024];
DatagramPacket Packet = new DatagramPacket(bytes,0,bytes.length);
socket.receive(Packet); //阻塞式 接受包
byte[] data = Packet.getData();
String s = new String(data, 0, data.length);
System.out.println(msg+""+s);
if (s.equals("bye")){
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
socket.close();
}
}
组合线程代码
package com.cjg.netCode;
public class talkTeacher {
public static void main(String[] args) {
new Thread(new threadChatUdp("127.0.0.1",8888,5555)).start();
new Thread(new udpChatRecevice(9999,"学生说:")).start();
}
}
package com.cjg.netCode;
public class talkStudent {
public static void main(String[] args) {
new Thread(new threadChatUdp("127.0.0.1",9999,7777)).start();
new Thread(new udpChatRecevice(8888,"老师:")).start();
}
}
1.8 url 统一资源定位符
https://www.baidu.com/
https 协议
www.baidu,com是由dns域名解析后的ip地址
端口号
合起来是 协议://ip:端口/项目名/资源
URL 网络类
package com.cjg.netCode;
import java.net.MalformedURLException;
import java.net.URL;
public class udpURL {
public static void main(String[] args) throws Exception {
URL url = new URL("https://localhost:7777/url/url.html?username=me&password=123");
System.out.println(url.getProtocol()); //协议
System.out.println(url.getHost());//ip
System.out.println(url.getPort());//端口
System.out.println(url.getPath());//文件
System.out.println(url.getFile());//文件全路径
System.out.println(url.getQuery());//参数
}
}
下载资源, 音乐 十年-陈奕迅
package com.cjg.netCode;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class udpURLTrue {
public static void main(String[] args) throws Exception {
//获取下载地址
URL url = new URL("https://freetyst.nf.migu.cn/public/product5th/product35/2019/10/1219/2018%E5%B9%B401%E6%9C%8829%E6%97%A514%E7%82%B911%E5%88%86%E5%86%85%E5%AE%B9%E5%87%86%E5%85%A5%E7%A6%BE%E4%BF%A1%E9%A2%84%E7%95%99999%E9%A6%96/%E6%AD%8C%E6%9B%B2%E4%B8%8B%E8%BD%BD/MP3_40_16_Stero/69910406417.mp3?key=c70ade03b2b2b6a2&Tim=1615361397852&channelid=00&msisdn=8d836d8cde8f44a29314f73e044f541e&CI=699104064172600908000006799484&F=000009");
//连接这个资源 http
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//输入流接收数据
InputStream inputStream = urlConnection.getInputStream();
//输出问一个文件
FileOutputStream fileOutputStream = new FileOutputStream("17.mp3");
//默认步骤
byte[] bytes = new byte[1024];
int len;
while ((len=inputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,len);
}
}
}
1