網路編程
網路編程的實質就是已經建立好的計算機網路的基礎之上,通過使用程式控制的特定方式,讓兩個(或多個)設備(例如計算機)之間進行資料傳輸,
java中的網路編程并不要求我們之前對計算機網路的知識有那么深入的研究,只需對網路的概念有基本的認識,并了解IP地址、埠號、URL等內容,這樣就能夠學習并使用JDK中提供的網路編程的API
java中和網路撰寫相關的API都在java.net包下面
C/S架構的全稱是Client/Server,即客戶端服務器端架構,客戶端包含一個或多個在用戶的電腦上運行的程式,而服務器端可以使用Socket來實作,服務器端的程式通過Socket與客戶端的程式通信,
C/S 架構也可以看做是胖客戶端架構,因為客戶端需要實作很多的業務邏輯和界面展示功能,這種架構中,作為客戶端的部分需要承受很大的壓力,因為顯示邏輯和事務處理都包含在其中,
優點:
C/S架構的界面和操作可以很豐富,
安全性能可以很容易保證,
回應速度較快,
缺點:
適用面窄,通常用于局域網中,
用戶群固定,由于程式需要安裝才可使用,因此不適合面向一些不可知的用戶,
維護成本高,軟體進行一次升級,則所有客戶端的程式都需要改變,
測驗客戶端與服務器端通信
Server:
package com.work;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server1 {
public static void main(String[] args) {
ServerSocket server = null;
Socket sock = null;
try {
server = new ServerSocket(7777);
System.out.println("服務器已經啟動");
while (true) {
sock = server.accept();
System.out.println("ip地址是:" + sock.getInetAddress());
System.out.println("埠號是:" + sock.getPort());
Thread t1 = new MyThread(sock);
t1.start();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class MyThread extends Thread {
public Socket sock;
public MyThread(Socket sock) {
this.sock = sock;
}
public synchronized void run() {
BufferedReader in = null;
PrintWriter out = null;
try {
in = new BufferedReader(new InputStreamReader(sock.getInputStream(), "gbk"));
out = new PrintWriter(new OutputStreamWriter(sock.getOutputStream(), "gbk"));
String line = null;
while (!"bye".equals(line = in.readLine())) {
out.println(Thread.currentThread().getName() + ",你好" + line);
out.flush();
System.out.println("客戶端發送的" + Thread.currentThread().getName() + ":" + line);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
in.close();
out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Client
package com.work;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class client1 {
@SuppressWarnings("resource")
public static void main(String[] args) {
PrintWriter out = null;
BufferedReader in = null;
try {
Socket sock = new Socket("127.0.0.1", 7777);
out = new PrintWriter(new OutputStreamWriter(sock.getOutputStream(), "gbk"));
in = new BufferedReader(new InputStreamReader(sock.getInputStream(), "gbk"));
while (true) {
Scanner scan = new Scanner(System.in);
System.out.println("請輸入要發送給服務器的話:");
String str = scan.nextLine();
out.println(str);
out.flush();
String line = in.readLine();
System.out.println("接收到服務器的:" + line);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
in.close();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
結果分析:
1、 用Telnet測驗:
(1)先開啟服務器
Telnet遠程訪問:

再次啟動一個客戶端

輸入bye結束通信:
運用client通信:

下期再見!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/208353.html
標籤:其他
上一篇:搞定SpringBoot難題!設計優秀的后端介面?輕松解決
下一篇:自增變數--自增自減運算子
