code 服務碼,根據code呼叫相應服務
status 狀態碼,根據執行結果返回狀態碼
socket之間使用json字串通訊
Java socket客戶端
package com.brewin.hammer.system.util.socket;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
/**
* Java socket客戶端
* @author Brewin
* @date 2020年5月20日 上午11:27:04
*
*/
public class SocketClient {
// 服務端IP地址
public static final String HOST = "127.0.0.1";
// 服務端埠
public static final int PORT = 50001;
public static void main(String args[]) throws Exception {
// 傳送給服務端的引數
Map<String, String> paramMap = new HashMap<String, String>();
//圖片轉換服務
paramMap.put("code", "100");
paramMap.put("url", "C:/Users/Brewin/Pictures/avatar/1.jpg");
// map轉成json字串,需要引入fastjson依賴
String param = JSON.toJSONString(paramMap);
// 接收服務端返回的資訊
String socketServerMsg = getSocketServerMsg(HOST, PORT, param);
System.out.println("服務端資訊:" + socketServerMsg);
// json字串轉成map,需要引入fastjson依賴
Map resultMap = (Map) JSON.parse(socketServerMsg);
// for (Object map : resultMap.entrySet()) {
// System.out.println(((Map.Entry) map).getKey() + ":" + ((Map.Entry) map).getValue());
// }
String code=String.valueOf(resultMap.get("code"));
System.out.println("服務碼 : "+code);
int status=(int) resultMap.get("status");
System.out.println("狀態碼 : "+status);
switch (code) {
//圖片轉換服務
case "100":
System.out.println("圖片轉換服務");
switch (status) {
//成功
case 10:
System.out.println("執行成功");
break;
//失敗
case 20:
System.out.println("執行失敗");
break;
//預設
default:
System.out.println("預設執行");
}
break;
//資料庫備份服務
case "200":
System.out.println("資料庫備份服務");
switch (status) {
//成功
case 10:
System.out.println("執行成功");
break;
//失敗
case 20:
System.out.println("執行失敗");
break;
//預設
default:
System.out.println("預設執行");
}
break;
default:
System.out.println("無對應服務");
}
}
public static String getSocketServerMsg(String host, int port, String message) throws Exception {
// 與服務端建立連線
Socket socket = new Socket(host, port);
// 獲得輸出流
OutputStream outputStream = socket.getOutputStream();
PrintWriter pWriter = new PrintWriter(outputStream);
pWriter.write(message);
pWriter.flush();
// 透過shutdownOutput高速伺服器已經傳送完資料,後續只能接受資料
socket.shutdownOutput();
// 獲得輸入流
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len = inputStream.read(bytes)) != -1) {
// 注意指定編碼格式,傳送方和接收方一定要統一,建議使用UTF-8
sb.append(new String(bytes, 0, len, "UTF-8"));
}
inputStream.close();
outputStream.close();
socket.close();
return sb.toString();
}
}
Python socket服務端
from socket import *
import json
import random
HOST = '127.0.0.1'
PORT = 50000
BUFSIZ = 1024
ADDR = (HOST,PORT)
tcpServerSock = socket(AF_INET,SOCK_STREAM)
tcpServerSock.bind(ADDR)
tcpServerSock.listen(5)
while True:
print('等待連線')
tcpClientSock, addr = tcpServerSock.accept()
print('接收到來自 :', addr,' 的連線')
while True:
request_data = tcpClientSock.recv(BUFSIZ)
if not request_data:
break
request_data_str = str(request_data, 'UTF-8')
print("來自客戶端的資料:" +request_data_str)
# 字串轉換成物件
data = json.loads(request_data_str)
response_data = {}
response_data['code'] = data['code']
response_data['status'] = 20
# 圖片轉換服務
if data['code']=='100':
if random.randint(0, 900)<300:
response_data['status'] = 10
response_data['url'] = 'C:/Users/Brewin/Pictures/avatar/3.jpg'
elif random.randint(0, 900)<600:
response_data['status'] = 20
else:
response_data['status'] = 0
# 資料儲存服務
elif data['code']=='200':
if random.randint(0, 900) < 300:
response_data['status'] = 10
response_data['url'] = 'C:/Users/Brewin/Pictures/avatar/3.jpg'
elif random.randint(0, 900) < 600:
response_data['status'] = 20
else:
response_data['status'] = 0
# 無對應服務
else:
response_data['code'] = '000'
response_data['status'] = 10
# 物件轉換成字串
response_data_str=json.dumps(response_data)
tcpClientSock.send(bytes(response_data_str, encoding = "utf8"))
tcpClientSock.close()
tcpServerSock.close()
Java socket服務端
package com.brewin.hammer.system.util.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Java socket服務端
* @author Brewin
* @date 2020年5月20日 上午11:08:32
*
*/
public class SocketServer {
// 服務端埠
public static final int PORT = 50001;
public static void main(String[] args) {
try {
//初始化服務端socket
ServerSocket server = new ServerSocket(PORT);
System.out.println("Java socket服務端開啟!");
//阻塞等待, 直到一個客戶端 socket過來
Socket socket = server.accept();
System.out.println("有客戶端socket連線!");
//輸入,接收來自客戶端socket的資料
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
//輸出,傳輸資料至 客戶端socket
PrintWriter out = new PrintWriter(socket.getOutputStream());
// 列印 客戶 socket 發過來的字元,按行(\n,\r,或\r\n)
System.out.println(in.readLine());
// to 客戶端,輸出
out.println("{\"code\": \"100\", \"status\": 10, \"url\": \"C:/Users/Brewin/Pictures/avatar/3.jpg\"}");
out.flush();
socket.close();
server.close();
System.out.println("服務結束!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Python socket客戶端
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost',5000))
print('Python客戶端開啟!')
# str 型別 -> bytes 型別,傳送,\n 千萬不要少了,因為前面的 server 是按行讀取的
sock.send(bytes('Python客戶端:你好\n',encoding='utf-8'))
# bytes 型別 -> str 型別,接受
print(str(sock.recv(1024),encoding = 'utf-8'))
sock.close()
print('Python客戶端結束!')
# json字串轉換成物件
json2object = json.loads(json)
# 物件轉換成json字串
object2json=json.dumps(object)
// json字串轉成map,需要引入fastjson依賴
Map json2map = (Map) JSON.parse(json);
// map轉成json字串,需要引入fastjson依賴
String map2json = JSON.toJSONString(map);
本作品採用《CC 協議》,轉載必須註明作者和本文連結