跟別人的其實沒什麼區別,只是自己寫的,自己記錄一下。還有就是粘包到底怎麼處理呢,誰寫了代碼希望跟我說下,求學習,我一直沒弄懂,中間什麼轉換爲固定長度啥的……
package com.study.tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import com.alibaba.fastjson.JSON;
public class ClientTcp {
public static void main(String[] args) throws UnknownHostException, IOException{
// 獲取用戶的輸入,當輸入內容爲“輸入停止” 時結束。
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.println("請編輯併發送消息……");
System.out.println("");
String scannerStr = "";
if(scanner.hasNextLine()) {
scannerStr = scanner.nextLine();
}
// 給服務端發送的Map
Map<String, Object> outmap = new HashMap<String, Object>();
outmap.put("word", scannerStr);
// 把map轉換爲json字符串
String outStr = JSON.toJSONString(outmap);
//創建客戶端,指定客戶端的ip地址和端口號
Socket socket = new Socket("127.0.0.1",8888);
//獲取網絡字節輸出流,準備向服務器寫數據
OutputStream os = socket.getOutputStream();
// 需要發送的字符串
// String outStr = "服務器,你好:" + scannerStr;
//向服務器寫數據
os.write(outStr.getBytes());
//獲取網絡字節輸入流,準別讀物服務器返回的數據
InputStream is = socket.getInputStream();
//讀取服務器返回的數據
byte[] bytes = new byte[1024];
int len = is.read(bytes);
String serverStr = new String(bytes,0,len);
System.out.println("返回的字符串爲:" + new String(bytes,0,len));
@SuppressWarnings("unchecked")
Map<String, Object> map2 = JSON.parseObject(serverStr, Map.class);
System.out.println("處理結果爲:" + map2.get("result"));
System.out.println("處理時間爲:" + map2.get("datatime"));
//釋放資源
socket.close();
if("輸入停止".equals(scannerStr)) {
scanner.close();
return;
}
}
}
}
package com.study.tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
public class ServeTcp {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("===== 服務端開始 =====");
//創建服務器
ServerSocket server = new ServerSocket(8888);
while(true) {
//監聽到發送數據的客戶端
Socket scoket = server.accept();
//創建網絡字節輸入流,讀取客戶端發送的數據
InputStream is = scoket.getInputStream();
//讀取客戶端發送的數據
byte[] bytes = new byte[1024];
int len = is.read(bytes);
// 接受到的客戶端字符串
String clientStr = new String(bytes,0,len);
System.out.println(clientStr);
// 把客戶端傳過來的數據解析
@SuppressWarnings("unchecked")
Map<String, Object> clientMap = JSON.parseObject(clientStr, Map.class);
String neirong = (String) clientMap.get("word");
System.out.println("客戶端傳過來的內容爲:" + neirong);
//獲取網絡字節輸出流,給客戶端寫回數據
OutputStream os = scoket.getOutputStream();
Map<String, Object> map = new HashMap<String, Object>();
// 處理結果
map.put("result", "內容:" + neirong + ",已經處理。");
//設置日期格式
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 處理時間,new Date()爲獲取當前系統時間
map.put("datatime", df.format(new Date()));
String outStr = JSON.toJSONString(map);
os.write(outStr.getBytes());
//釋放資源
scoket.close();
// 如果傳來的字符串爲true 則跳出死循環
if("輸入停止".equals(neirong)) {
server.close();
System.out.println("===== 服務端結束 =====");
return;
}
}
}
}
額外需要一個fastjson 的jar包。自己弄下