java socket 传输字节_Java socket字节流传输示例解析

本文为大家分享了Java socket字节流传输示例,供大家参考,具体内容如下

服务端server端:

package com.yuan.socket;

import java.io.*;

import java.net.ServerSocket;

import java.net.Socket;

/**

* Created by YUAN on 2016-09-17.

*/

public class TalkServer4Byte {

private ServerSocket server;

private int port = 5020;

public TalkServer4Byte() {

try {

server = new ServerSocket(port);

} catch (IOException e) {

}

}

public void talk() {

System.out.println("监控端口:" + port);

Socket socket = null;

while (true) {

try {

// 阻塞等待,每接收到一个请求就创建一个新的连接实例

socket = server.accept();

System.out.println("连接客户端地址:" + socket.getRemoteSocketAddress());

// 装饰流BufferedReader封装输入流(接收客户端的流)

BufferedInputStream bis = new BufferedInputStream(

socket.getInputStream());

DataInputStream dis = new DataInputStream(bis);

byte[] bytes = new byte[1]; // 一次读取一个byte

String ret = "";

while (dis.read(bytes) != -1) {

ret += bytesToHexString(bytes) + " ";

if (dis.available() == 0) { //一个请求

doSomething(ret);

}

}

} catch (IOException e) {

System.out.println(e.getMessage());

} finally {

try {

socket.close();

} catch (IOException e) {

System.out.println(e.getMessage());

}

}

}

}

public static void doSomething(String ret) {

System.out.println(ret);

}

public static String bytesToHexString(byte[] src) {

StringBuilder stringBuilder = new StringBuilder("");

if (src == null || src.length <= 0) {

return null;

}

for (int i = 0; i < src.length; i++) {

int v = src[i] & 0xFF;

String hv = Integer.toHexString(v);

if (hv.length() < 2) {

stringBuilder.append(0);

}

stringBuilder.append(hv);

}

return stringBuilder.toString();

}

public static String BytesHexString(byte[] b) {

String ret = "";

for (int i = 0; i < b.length; i++) {

String hex = Integer.toHexString(b[i] & 0xFF);

if (hex.length() == 1) {

hex = '0' + hex;

}

ret += hex.toUpperCase();

}

return ret;

}

public static void main(String[] args) {

TalkServer4Byte server = new TalkServer4Byte();

server.talk();

}

}

客户端client代码:

package com.yuan.socket;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.InetSocketAddress;

import java.net.Socket;

import java.net.SocketAddress;

/**

* Created by YUAN on 2016-09-17.

*/

public class TalkClient4Byte {

private Socket socket;

private SocketAddress address;

public TalkClient4Byte() {

try {

socket = new Socket();

address = new InetSocketAddress("127.0.0.1", 5020);

socket.connect(address, 1000);

} catch (IOException e) {

e.printStackTrace();

}

}

public void talk() {

try {

//使用DataInputStream封装输入流

InputStream os = new DataInputStream(System.in);

byte [] b = new byte[1];

DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

while (-1 != os.read(b)) {

dos.write(b); // 发送给客户端

}

dos.flush();

dos.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

socket.close();

} catch (IOException e) {

}

}

}

public static void main(String[] args) {

TalkClient4Byte client = new TalkClient4Byte();

client.talk();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值