socket 中使用byte数组或者是字符流传输数据

本文介绍如何在Java中使用Socket通过byte数组和字符流进行数据传输。客户端示例展示了如何将字符串转换为ByteBuffer并写入输出流,而服务器端则演示了如何读取输入流并将接收到的数据转换回字符串。

1、使用byte数组传输

client:

public static void test(){
Socket socket = null;
BufferedReader br = null;
PrintWriter pw = null;
try {
// 客户端socket指定服务器的地址和端口号
socket = new Socket("127.0.0.1", 7890);
System.out.println("Socket=" + socket);
// 向SG186系统发送请求报文
OutputStream stream = socket.getOutputStream();
//pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
String requestmsg = "SG186,nihaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
ByteBuffer byteBuffer = ByteBuffer.allocate(requestmsg.length());
byteBuffer.put(requestmsg.getBytes());
byteBuffer.flip();
System.out.println("byteBuffer:"+byteBuffer);
//pw.println(byteBuffer.array());
stream.write(byteBuffer.array());
stream.flush();
// 读取SG186系统发送的响应报文
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuffer buffer = new StringBuffer();
String str;
while ((str = br.readLine()) != null) {
buffer.append(str);
}
System.out.println("api缴费方法中接收到SG186系统的响应报文是:" + buffer.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
System.out.println("close......");
// br.close();
// pw.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


server段:

public static void test2() {
ServerSocket s = null;
Socket socket = null;
PrintWriter pw = null;
try {
// 设定服务端的端口号
s = new ServerSocket(7890);
System.out.println("ServerSocket Start:" + s);
// 等待请求,此方法会一直阻塞,直到获得请求才往下走
socket = s.accept();
System.out.println("Connection accept socket:" + socket);
// 用于接收客户端发来的请求
InputStream stream = socket.getInputStream();
byte[] bytes =new byte[1024];
stream.read(bytes);//写入byte数组中。再依次读取出来即可。


String str = new String(bytes,0,bytes.length);
System.out.println("服务端接收到客户端发送的请求报文:" + str);
// 用于发送返回信息,可以不需要装饰这么多io流使用缓冲流时发送数据要注意调用.flush()方法
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
Thread.sleep(1000);
String responseStr = "00061000|白仁路|永新北台|2340905|.51|99361410|140.95|140.95|0|0|0|";
pw.println(responseStr);
pw.flush();
// }


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
System.out.println("Close.....");
try {
pw.close();
socket.close();
s.close();
} catch (Exception e2) {


}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值