ソケット(Tcp)送信は、ストリームの前に標識を付ける.
開発では、このような需要があります.2台の携帯電話は、文字列、bitmap、xmlファイルなどを転送するために、Tcp伝送データを確立します.異なるタイプのデータなので、サーバーで受信する時には、今回得られた流れを別の解析方式で解析する必要があります.だから、ここでは卵痛の問題があります.今回のデータの種類をどうやって知るべきですか?これはこのブログで言うべきことです.ストリームの前に標識をつけるということです.
1.標識が追加されていない、つまり、自分で一つのプロトコルを定義して、伝送行為を制約し、自分で定義した規則に従って実行する.Socketにあまり詳しくないなら、このブログを見てください.送信先を見てください.
1.標識が追加されていない、つまり、自分で一つのプロトコルを定義して、伝送行為を制約し、自分で定義した規則に従って実行する.Socketにあまり詳しくないなら、このブログを見てください.送信先を見てください.
Socket s = new Socket(serverAddress, 10086);
OutputStream out = s.getOutputStream();
out.write("1# ".getBytes());//1#
s.close();
2.受信側ServerSocket ss = new ServerSocket(10086);
Socket accept = ss.accept();
//3.
InputStream in = accept.getInputStream();
int count = 0;
while (count == 0) {//
count = in.available();
}
String flag = getBodyLength(in);//
// flag 1# ,
// ,
switch (flag) {
case "1#"://
pullString(in);
break;
case "2#"://
pullBitmap(in);
break;
public final int headerBufferSize = 2;//
public synchronized String getBodyLength(InputStream is) throws IOException {
byte[] b = readIs2(is, headerBufferSize);
return new String(b, "UTF-8");
}
public synchronized byte[] readIs2(InputStream is, int len) throws IOException {
byte[] data = new byte[len];
int i = 0;
while (i < len) {
int r = is.read(data, i, len - i);
if (r <= 0) {
return data;
}
i = i + r;
}
return data;
}
ここでもう一つの方法を提供します.2バイトの配列を1バイトの配列に統合します.// , bytes_1 ,bytes_2
public static synchronized byte[] mergerByte(byte[] bytes_1, byte[] bytes_2) {
byte[] bytes = new byte[bytes_1.length + bytes_2.length];
System.arraycopy(bytes_1, 0, bytes, 0, bytes_1.length);
System.arraycopy(bytes_2, 0, bytes, bytes_1.length, bytes_2.length);
return bytes;
}
助けたら小指で支えてください.