跟别人的其实没什么区别,只是自己写的,自己记录一下。还有就是粘包到底怎么处理呢,谁写了代码希望跟我说下,求学习,我一直没弄懂,中间什么转换为固定长度啥的……
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包。自己弄下