试试以下方法,没有环境试。1.gb2312 -> UCS2 String src = "中文"; String result = new String(s.getBytes("GBK"), "UTF-16BE"); //now result is a UCS2 String byte[] ucs2Bytes = result.getBytes("UTF-16BE");2.UCS2 -> gb2312 byte[] ucs2Bytes = new byte[]{0x4e, 0x2d, 0x65, 0x87}; //UCS2 bytes String src = new String(ucs2Bytes, "UTF-16BE"); String result = new String(s.getBytes(""UTF-16BE""), "GBK"); //now result is a GBK String
消息体为XML格式的字符串,此字符串采用UNICODE编码现在程序有点问题,在清单中你能看到问题的出处 我实在没办法解决了,公司的同事都束手无策,希望有高手能帮帮我们import java.net.*; import java.io.*; import java.lang.*; import java.text.*; import java.util.*;class test { public static void main(String args[]) throws Exception { Socket socket = new Socket("202.106.155.60", 7000); //202.106.155.60这个IP是测试用的IP,我已经把它连上互联网 DataInputStream in = new DataInputStream(socket.getInputStream()); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); int packetLen = in.readInt(); byte buff[] = new byte[packetLen-4]; int realLen = 0; int left = packetLen-4; int i = in.read(buff, realLen, left); if (i != -1) { } //以上得到的buff不需要,丢弃 //String textstr = new String(buff, "gb2312"); //System.out.println(textstr); //发送login包 String login = "<root><package_type>login</package_type><connect_id>5000</connect_id><connect_pwd>5000</connect_pwd><connect_type>1</connect_type></root>"; byte[] buf = login.getBytes("UTF-16BE"); out.writeInt(buf.length+4); out.write(buf, 0, buf.length); int packetLen1 = in.readInt(); //程序在这一行readInt时失败 /* java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) at java.net.Socket.connect(Socket.java:426) at java.net.Socket.connect(Socket.java:376) at java.net.Socket.<init>(Socket.java:291) at java.net.Socket.<init>(Socket.java:119) at test.main(test.java:11) Exception in thread "main" */ byte buff1[] = new byte[packetLen1-4]; int realLen1 = 0; int left1 = packetLen1-4; i = in.read(buff1, realLen1, left1); if (i != -1) { } } }
将写数据和读数据的部分加入 try {...} catch(...) {...
to jscsqb: 你现在在网上就可以直接帮忙调试一下这个程序啊,你说的办法我早就试过了,每次到第二个readInt那一行就抛出异常,但是在第一次readInt是正常的
String src = "中文";
String result = new String(s.getBytes("GBK"), "UTF-16BE"); //now result is a UCS2 String
byte[] ucs2Bytes = result.getBytes("UTF-16BE");2.UCS2 -> gb2312
byte[] ucs2Bytes = new byte[]{0x4e, 0x2d, 0x65, 0x87}; //UCS2 bytes
String src = new String(ucs2Bytes, "UTF-16BE");
String result = new String(s.getBytes(""UTF-16BE""), "GBK"); //now result is a GBK String
1.首先与socket服务器建立连接
2.服务器立即返回数据包,是一个测试包,客户端可以丢弃不予理会
3.客户端发送login包,它是一个XML格式的数据包
4.服务器对收到的XML数据进行解析和用户验证,通过验证后就返回一条login_ret消息数据包由两个部分组成:
项目 字节数 类型 说明
Message Size 4 Unsigned Integer 消息总长度(含此4个字节及消息体)
Message Body 可变 String 消息体
消息体为XML格式的字符串,此字符串采用UNICODE编码现在程序有点问题,在清单中你能看到问题的出处
我实在没办法解决了,公司的同事都束手无策,希望有高手能帮帮我们import java.net.*;
import java.io.*;
import java.lang.*;
import java.text.*;
import java.util.*;class test {
public static void main(String args[]) throws Exception {
Socket socket = new Socket("202.106.155.60", 7000);
//202.106.155.60这个IP是测试用的IP,我已经把它连上互联网 DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
int packetLen = in.readInt();
byte buff[] = new byte[packetLen-4];
int realLen = 0;
int left = packetLen-4; int i = in.read(buff, realLen, left);
if (i != -1) {
} //以上得到的buff不需要,丢弃
//String textstr = new String(buff, "gb2312");
//System.out.println(textstr);
//发送login包
String login = "<root><package_type>login</package_type><connect_id>5000</connect_id><connect_pwd>5000</connect_pwd><connect_type>1</connect_type></root>"; byte[] buf = login.getBytes("UTF-16BE");
out.writeInt(buf.length+4);
out.write(buf, 0, buf.length); int packetLen1 = in.readInt();
//程序在这一行readInt时失败
/*
java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) at java.net.Socket.connect(Socket.java:426) at java.net.Socket.connect(Socket.java:376) at java.net.Socket.<init>(Socket.java:291) at java.net.Socket.<init>(Socket.java:119) at test.main(test.java:11) Exception in thread "main"
*/ byte buff1[] = new byte[packetLen1-4];
int realLen1 = 0;
int left1 = packetLen1-4; i = in.read(buff1, realLen1, left1);
if (i != -1) {
}
}
}
try
{...}
catch(...)
{...
你现在在网上就可以直接帮忙调试一下这个程序啊,你说的办法我早就试过了,每次到第二个readInt那一行就抛出异常,但是在第一次readInt是正常的