網路程式設計實戰講解
阿新 • • 發佈:2021-10-03
網路程式設計實戰講解
TCP實現聊天
客戶端
package com.example.quickstart; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; //客戶端 public class TCPClient { public static void main(String[] args) { Socket socket=null; OutputStream outputStream=null; try { //要知道伺服器的地址 InetAddress inetAddress = InetAddress.getByName("127.0.0.1"); int port=8888;//埠號 //建立一個socket連線 socket = new Socket(inetAddress, port); //傳送訊息 IO流 outputStream = socket.getOutputStream(); outputStream.write("你好,歡迎來到我的世界".getBytes()); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { outputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
伺服器端
package com.example.quickstart; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class TCPServer { public static void main(String[] args) { ServerSocket serverSocket=null; Socket accept=null; InputStream inputStream=null; ByteArrayOutputStream arrayOutputStream=null; //我得有一個地址 try { serverSocket = new ServerSocket(8888); while(true){ //等待客戶端連線過來 accept = serverSocket.accept(); //讀取客戶端的訊息 inputStream = accept.getInputStream(); //管道流 arrayOutputStream = new ByteArrayOutputStream(); byte[] buffer=new byte[1024]; int len; while((len=inputStream.read(buffer))!=-1){ arrayOutputStream.write(buffer,0,len); } System.out.println(arrayOutputStream.toString()); } /*byte[] bytes = new byte[1024];//1k int len; while((len=inputStream.read(bytes))!=-1){ String message = new String(bytes, 0, len); System.out.println(message); }*/ } catch (IOException e) { e.printStackTrace(); }finally { try { arrayOutputStream.close(); inputStream.close(); accept.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
TCP檔案上傳實現
客戶端
package com.example.quickstart; import java.io.*; import java.net.InetAddress; import java.net.Socket; public class TCPUploadClient { public static void main(String[] args) { try { //建立一個Socket連線 Socket socket = new Socket(InetAddress.getByName("localhost"), 9000); //建立一個輸出流 OutputStream outputStream = socket.getOutputStream(); //檔案輸入流-讀取檔案 FileInputStream inputStream = new FileInputStream(new File("img1.webp")); //寫出檔案 byte[] buffer=new byte[1024]; int len; while((len=inputStream.read(buffer))!=-1){ outputStream.write(buffer,0,len); } //通知伺服器我已經結束了 socket.shutdownOutput(); //確定伺服器接收完畢,才能斷開連線 InputStream socketInputStream = socket.getInputStream(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer2 = new byte[2048]; int len2; while((len2=socketInputStream.read(buffer2))!=-1){ byteArrayOutputStream.write(buffer2,0,len2); } String message = byteArrayOutputStream.toString(); System.out.println(message); //關閉資源 byteArrayOutputStream.close(); socketInputStream.close(); inputStream.close(); outputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
伺服器端
package com.example.quickstart;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPUploadServer {
public static void main(String[] args) {
try {
//建立服務
ServerSocket serverSocket = new ServerSocket(9000);
//監聽客戶端的連線
Socket accept = serverSocket.accept();//阻塞式監聽,會一直等待客戶端連線
//獲取輸入流
InputStream inputStream = accept.getInputStream();
//檔案輸出
FileOutputStream outputStream = new FileOutputStream(new File("receive.webp"));
byte[] buffer = new byte[1024];
int len;
while((len=inputStream.read(buffer))!=-1){
outputStream.write(buffer,0,len);
}
//通知客戶端我接收完畢了
OutputStream acceptOutputStream = accept.getOutputStream();
acceptOutputStream.write("我接收完畢了,你可以斷開了".getBytes());
//關閉資源
outputStream.close();
inputStream.close();
accept.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
UDP訊息傳送
客戶端
package com.example.udp;
import java.io.IOException;
import java.net.*;
//不需要連線伺服器
public class UDPClientDemo1 {
public static void main(String[] args) {
try {
//建立一個Socket
DatagramSocket socket = new DatagramSocket();
//建個包
String message="你好,伺服器";
byte[] messageBytes = message.getBytes();
InetAddress localhost = InetAddress.getByName("localhost");//傳送給誰
int port = 9090;//埠號
DatagramPacket packet = new DatagramPacket(messageBytes,0,messageBytes.length,localhost,port);
//傳送包
socket.send(packet);
//關閉流
socket.close();
} catch (SocketException | UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
伺服器端
package com.example.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
//還是要等待客戶端的連線
public class UDPServerDemo1 {
public static void main(String[] args) {
try {
//開放埠
DatagramSocket socket = new DatagramSocket(9090);
//接收資料包
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
socket.receive(packet);//阻塞接收
//輸出包裹資訊
System.out.println(new String(packet.getData()));
//關閉連線
socket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
UDP連續傳送訊息
傳送方
package com.example.udp;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
public class UDPSenderDemo1 {
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket(8888);
//準備資料:控制檯讀取 System.in
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while(true){
String message = reader.readLine();
byte[] messageBytes = message.getBytes();
InetAddress localhost = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(messageBytes, 0, messageBytes.length, localhost, 6666);
socket.send(packet);
if("bye".equalsIgnoreCase(message)){
break;
}
}
socket.close();
} catch (SocketException | UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
接收方
package com.example.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPReceiveDemo1 {
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket(6666);
while(true){
//準備接收包裹
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
socket.receive(packet);
byte[] data = packet.getData();
String message = new String(data, 0, data.length);
System.out.println(message);
if("bye".equalsIgnoreCase(message)){
break;
}
}
socket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
UDP多執行緒線上諮詢
傳送方
package com.example.udp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
public class ChatSender implements Runnable {
DatagramSocket socket=null;
BufferedReader reader=null;
private String toIP;
private int toPort;
private int fromPort;
public ChatSender(String toIP, int toPort, int fromPort) {
this.toIP = toIP;
this.toPort = toPort;
this.fromPort = fromPort;
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[] dataBytes = data.getBytes();
DatagramPacket packet = new DatagramPacket(dataBytes, 0, dataBytes.length, new InetSocketAddress(toIP, toPort));
socket.send(packet);
if("bye".equalsIgnoreCase(data)){
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
socket.close();
}
}
接收方
package com.example.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ChatReceiver implements Runnable {
DatagramSocket socket=null;
private int port;
public ChatReceiver(int port) {
this.port = port;
try {
socket=new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
byte[] buffer=null;
DatagramPacket packet=null;
while(true){
try {
buffer=new byte[1024];
packet = new DatagramPacket(buffer, 0, buffer.length);
socket.receive(packet);
byte[] data = packet.getData();
String message = new String(data);
System.out.println("fromIP: "+packet.getAddress()+", fromMessage: "+message);
if("bye".equalsIgnoreCase(message)){
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
socket.close();
}
}
學生:即是傳送方也是接收方
package com.example.udp;
public class ChatStudent {
public static void main(String[] args) {
//開啟兩個執行緒
new Thread(new ChatSender("localhost",6666,7777)).start();
new Thread(new ChatReceiver(8888)).start();
}
}
老師:即是傳送方也是接收方
package com.example.udp;
public class ChatTeacher {
public static void main(String[] args) {
new Thread(new ChatSender("localhost",8888,9999)).start();
new Thread(new ChatReceiver(6666)).start();
}
}
URL下載網路資源
爬取網易雲音樂
package com.example.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;
import java.net.URLConnection;
//下載地址:http://localhost:8080/favicon.ico
//ps:需開啟tomcat
public class URLDownload {
public static void main(String[] args) {
try {
//下載地址
URL url = new URL("https://m801.music.126.net/20211003095941/a0a7f59871fb88d6492845ca20aac658/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/11062312467/6a10/8c90/0eaf/e12ae5442e789a1e2215ddeae103befb.m4a");
//連線到這個資源
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream inputStream = connection.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream("奔流.m4a");
byte[] buffer = new byte[1024];
int len;
while((len=inputStream.read(buffer))!=-1){
fileOutputStream.write(buffer,0,len);
}
fileOutputStream.close();
inputStream.close();
connection.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
【狂神說Java】網路程式設計實戰講解_嗶哩嗶哩_bilibili
作者:(x²+y²-1)³=x²y³ 出處:http://www.cnblogs.com/yts-helloworld/-------------------------------------------
個性簽名:獨學而無友,則孤陋而寡聞。做一個靈魂有趣的人!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!
萬水千山總是情,打賞一分行不行,所以如果你心情還比較高興,也是可以掃碼打賞博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!