java socket 自定义协议_JAVA Socket通信中自定义TCP通信协议

JAVA中Socket通信是以流的形式传输数据,对于InputStream和OutputStream的装饰问题,如果只是传输一串字符串,可以通过简单的BufferedReader和PrintWriter实现,但是在实际的客户端与服务端通信中不可能只是传递简单字符串,会有各种不同形式的信息,若是传输对象,则可以用 ObjectInputStream和ObjectOutputStream来实现,但是这种方法局限性也很明显,所以需要自己定义通信协议,用到DataInputStream和DataOutputStream。

以下是利用DataInputStream和DataOutputStream实现的将person类实例中的数据在文件中存取的过程,在Socket通信中也类似。

person.class

public class person {private String name;private int age;public person(String name,int age){this.name=name;this.age=age;}public String getName(){return name;}public int getAge(){return age;}}文件存取过程:

import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class DataInputstream {public static void main(String[] args) throws IOException {person a=new person("ba1",20);String path="F:/aaa.txt";String name=null;int age=0;File file=new File(path);if(!file.exists())file.createNewFile();FileOutputStream fos=new FileOutputStream(file);DataOutputStream dos=new DataOutputStream(fos);dos.writeByte(0x17);//用byte数据可以表示后面的数据类型,这里代表person类dos.writeChar('/t');//用/t符来分隔不同的数据dos.writeChars(a.getName());dos.writeChar('/t');dos.writeInt(a.getAge());dos.close();fos.close();DataInputStream dis=new DataInputStream(new FileInputStream(file));switch(dis.readByte()){case 0x17:dis.readChar();//跳过分隔符StringBuffer n=new StringBuffer();char c;while((c=dis.readChar())!='/t')//因为readchar方法只能一个一个读,所以要一位一位的加到字符串中n.append(c);name=n.toString();age=dis.readInt();}System.out.println("name is "+name+",age is "+age);dis.close();}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值