小白級程序員 還在學習,前幾天剛剛開始在跟着老師做網絡編程,記錄一下學習過程
基於Python網絡編程學習
製作路徑:
1. Socket通訊 雙向通訊
TCP
UDP
2. 遠程對象 Pyro
https://python-parallel-programmning-cookbook.readthedocs.io/zh_CN/latest/chapter5/06_Remote_Method_Invocation_with_Pyro4.html
3. SOA
Web Service: https://pypi.org/project/Flask-Spyne/
wsdl
uddi
soap
REST: https://www.django-rest-framework.org/
4. Web三層
Django(MVC) + MySql
5. Ajax
jQuery + Django
6. 新浪雲 Django:
7. Gitee部署
以上是老師給出的學習路徑及文檔地址
正在製作第一部分,目標是基於java與Python完成TCP及UDP簡單雙向通訊實驗昨天開始到現在寫(chao)完Java部分
#學習自csdn學院李興華老師Java核心技術網絡編程部分
基於java TCP網絡通訊編程分爲兩部分:
客戶端部分與服務端部分。
工作過程:服務端監聽特定端口,接收客戶端發來消息,然後把接收到的消息增加一部分返回至客戶端打印輸出。
1.客戶端(Socket)
java提供有java.net.Socket;創建客戶端對象
-
public Socket(String host,int port)throws UnknownHostException,IOException //Socket類構造函數host(服務端地址)port(服務端所監聽的端口)
Socket client = new Socket("localhost",9999);//創建客戶端對象從9999端口發送消息
客戶端對象建立完畢 接下來進行兩項工作
第一 發送字符串到客戶端
第二接收客戶端發來的字符串並打印
在Socket類中有兩個類 一個是輸入流一個是輸出流
client.getInputStream();client.getOutputStream();
第一 發送字符串到客戶端(output)
客戶端發送數據到服務端
然後利用Scanner,用戶就可以從鍵盤輸入到客戶端 客戶端送到服務端
Scanner input = new Scanner(System.in); //鍵盤輸入對象
PrintStream output = new PrintStream(client.getOutputStream()) ;//output對象 用來把字符串送到服務端
String str = input.next().trim(); //接收鍵盤 存到str中
output.println(str); //送到服務端
第二 接收客戶端發來的信息(input)
客戶端利用input方法接收數據就可以完成從服務端到客戶端接收 然後打印
Scanner in = new Scanner(client.getInputStream());//用於接收數據
System.out.println(in.next().trim());//打印接收到的數據
完整代碼展示
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class HellwClient {
public static void main(String[] args) throws Exception{
Socket client = new Socket("localhost",9999);
Scanner input = new Scanner(System.in); //鍵盤輸入
Scanner in = new Scanner(client.getInputStream());
in.useDelimiter("\n");
input.useDelimiter("\n");
PrintStream output = new PrintStream(client.getOutputStream()) ;
boolean flag = true;
while(flag) {
System.out.print("請輸入數據");
if(input.hasNext()) { //鍵盤緩存區還有數據
String str = input.next().trim();
output.println(str); //送到服務端
if(in.hasNext()) {
System.out.println(in.next().trim());
}
if("byebye".equalsIgnoreCase(str)) {
flag = false;
}
}
}
client.close();
}
}
2.服務端(ServerSocket)
java提供有java.net.ServerSocket;創建服務端對象
-
public ServerSocket(int port)throws IOException //ServerSocket類構造函數 port爲監聽端口
ServerSocket server = new ServerSocket(9999); //創建服務端對象監聽9999端口
然後被動等待客戶端連接:Socket client = server.accept();//等待一個客戶端連接進來
到此爲止,客戶端實例等待連接部分建立完畢;
接下來就是兩件事情。
第一:接收用戶所發送的字符串。
第二:增加一部分字符串然後返回給用戶。
第一 接收用戶所發送的字符串
Scanner scan = new Scanner(client.getInputStream());
#####在服務端中 有一個Socket對象,客戶端中也有一個Socket對象,客戶端的Socket送到服務端Socket,所以在服務端是input方法獲得送來的字符串(自己的理解,有錯請指出)#########
String str = scan.next().trim();//接收字符串保存到str中
第二 發送字符串回客戶端
PrintStream out = new PrintStream(client.getOutputStream());
out.println("123:"+str);//與上一部分同理 利用服務端Socket對象output返回字符串至客戶端Socket對象
至此一對一通訊完成
然後如果多人同時通訊就需要多線程支持,把主體IO部分創建一個新的線程,即可完成多客戶端同時通訊。
完整代碼展示
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class HellowServer {
public static void main(String args[]) throws Exception {
ServerSocket server = new ServerSocket(9999);
boolean outflag = true;
while(outflag) {
System.out.println("等待客戶連接");
Socket client = server.accept();
new Thread(()->{
try {
Scanner scan = new Scanner(client.getInputStream());
scan.useDelimiter("\n");
PrintStream out = new PrintStream(client.getOutputStream());
boolean flag = true;
while(flag) { //一直進行
if(scan.hasNext()) {
String str = scan.next().trim();
if("byebye".equalsIgnoreCase(str)) {
flag = false;
out.println("您已退出系統,byeye");
}else {
out.println("123:"+str); //不是byebye 那就加上123返回
}
}
}
}catch (Exception e) {
}
}).start();
}
}
###新人發帖