socket通讯的奇怪问题========在线等待========== socket问题可以归结为:发送非ASCII接收就有问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是不是java自动做了内码转换了?你用的char数组,恐怕........... 发送的时候是以byte[] ,还是char[]??? 你搞得太复杂了..用面向对象方法封装一个数据包不就得了..解包也容易!! 下面是一个封装包的类ITPPacket,putValue()方法用于填充包,getValue()方法,接收端从包中取得数据:------------------------------------------------------------package com.bySoft.acee.comm;import java.io.PrintStream;import java.util.ArrayList;import java.util.StringTokenizer;public class ITPPacket{ private byte hdrBuf[]; private ArrayList header; private String method; private String ver; public String ip; public static final String ITP_VER = "ITP1.1"; public static final String ITP_CR = String.valueOf('\n'); public static final String ITP_REQ_ECHO = "ITP-REQ-ECHO"; public static final String ITP_REQ_WHOAMI = "ITP-REQ-WAI"; public static final String ITP_REQ_WHOISWHO = "ITP-REQ-WIW"; public static final String ITP_REQ_LOIGIN = "ITP-REQ-LOGIN"; public static final String ITP_REQ_LOGOUT = "ITP-REQ-LOGOUT"; public static final String ITP_REQ_KILL = "ITP-REQ-KILL"; public static final String ITP_RPL_OK = "ITP-RPL-OK"; public static final String ITP_RPL_FAILED = "ITP-RPL-FAILED"; public static final String ITP_PSH_TXT = "ITP-PSH-TEXT"; public static final String ITP_PSH_MMS = "ITP-PSH-MMS"; public static final String ITP_PSH_URL = "ITP-PSH-URL"; public static final String ITP_END = "\t\t"; public ITPPacket(String method) { header = new ArrayList(); header.add(method + " " + "ITP1.1"); } public ITPPacket(byte hdrBuf[]) throws Exception { this.hdrBuf = hdrBuf; String tmp = new String(this.hdrBuf, 0, this.hdrBuf.length); StringTokenizer st = new StringTokenizer(tmp, ITP_CR); header = new ArrayList(); for(; st.hasMoreTokens(); header.add(st.nextToken())); String l = (String)header.get(0); st = new StringTokenizer(l, " "); method = st.nextToken(); ver = st.nextToken(); } public String getValue(String f) { String search = f + ":"; String find = ""; for(int i = 0; i < header.size(); i++) { String l = (String)header.get(i); if(!l.toLowerCase().startsWith(search)) continue; find = l.substring(search.length()).trim(); break; } return find; } public ArrayList getValueList(String f) { String search = f + ":"; String find = ""; ArrayList tmp = new ArrayList(); for(int i = 0; i < header.size(); i++) { String l = (String)header.get(i); if(l.toLowerCase().startsWith(search)) tmp.add(l.substring(search.length()).trim()); } return tmp; } public void putValue(String f, String v) { System.out.println("added"); header.add(f + ": " + v); } public String getMethod() { return method; } public String getVer() { return ver; } public byte[] toBytes() { String tmp = ""; for(int i = 0; i < header.size(); i++) { String l = (String)header.get(i); tmp = tmp + l; tmp = tmp + ITP_CR; } tmp = tmp + "\t\t"; tmp = tmp + ITP_CR; return tmp.getBytes(); }}------------------------------------------------------- 我同情你们,你们程序员,不幸的星辰, 你们聪明而又晶莹, 乐于为迷途的老板照亮道路, 可没谁报答你们,不论神或人: 你们不恋爱,也从不知道爱! 永恒的时光带领你们 无休止地在广袤的空中行进。 你们走完了几多旅程, 自从老板沉湎在情人的怀抱里, 忘记了星已白,夜已深。 谢谢Kylix_XP,但你的程序不能解决我的问题 用netxray接在网上跟踪一下吧,看看到底是发出端还是接收端除了问题。然后就自己看程序吧,哪里比特顺序搞错了。 这个我了解一点。你要发送 0xBF是不能直接发送的,需要发送-0x41,不然最高位会丢失。这个问题我没有解决。 Java写的过期文件处理 新手题 急急急! java的return是程序结束了还是什么?程序结束底层调用了什么啊 java如何知道网络是否断开 关于java.lang.reflect.Field 和 java.lang.reflect.Method 的问题 List变量的值为什么会转成 Customer 对象的值???? 如何执行本机代码?编译无错,但运行不了 我写Servlet的错误 靠scjp的人进来啊?? 【请教】如何把已知的字符串名称当作类的对象的名称?? 想学java,不知道那种工具最方便,请高手指点? Jbulid不能正常工作
下面是一个封装包的类ITPPacket,putValue()方法用于填充包,getValue()方法,接收端从包中取得数据:------------------------------------------------------------
package com.bySoft.acee.comm;import java.io.PrintStream;
import java.util.ArrayList;
import java.util.StringTokenizer;public class ITPPacket
{ private byte hdrBuf[];
private ArrayList header;
private String method;
private String ver;
public String ip;
public static final String ITP_VER = "ITP1.1";
public static final String ITP_CR = String.valueOf('\n');
public static final String ITP_REQ_ECHO = "ITP-REQ-ECHO";
public static final String ITP_REQ_WHOAMI = "ITP-REQ-WAI";
public static final String ITP_REQ_WHOISWHO = "ITP-REQ-WIW";
public static final String ITP_REQ_LOIGIN = "ITP-REQ-LOGIN";
public static final String ITP_REQ_LOGOUT = "ITP-REQ-LOGOUT";
public static final String ITP_REQ_KILL = "ITP-REQ-KILL";
public static final String ITP_RPL_OK = "ITP-RPL-OK";
public static final String ITP_RPL_FAILED = "ITP-RPL-FAILED";
public static final String ITP_PSH_TXT = "ITP-PSH-TEXT";
public static final String ITP_PSH_MMS = "ITP-PSH-MMS";
public static final String ITP_PSH_URL = "ITP-PSH-URL";
public static final String ITP_END = "\t\t"; public ITPPacket(String method)
{
header = new ArrayList();
header.add(method + " " + "ITP1.1");
} public ITPPacket(byte hdrBuf[])
throws Exception
{
this.hdrBuf = hdrBuf;
String tmp = new String(this.hdrBuf, 0, this.hdrBuf.length);
StringTokenizer st = new StringTokenizer(tmp, ITP_CR);
header = new ArrayList();
for(; st.hasMoreTokens(); header.add(st.nextToken()));
String l = (String)header.get(0);
st = new StringTokenizer(l, " ");
method = st.nextToken();
ver = st.nextToken();
} public String getValue(String f)
{
String search = f + ":";
String find = "";
for(int i = 0; i < header.size(); i++)
{
String l = (String)header.get(i);
if(!l.toLowerCase().startsWith(search))
continue;
find = l.substring(search.length()).trim();
break;
} return find;
} public ArrayList getValueList(String f)
{
String search = f + ":";
String find = "";
ArrayList tmp = new ArrayList();
for(int i = 0; i < header.size(); i++)
{
String l = (String)header.get(i);
if(l.toLowerCase().startsWith(search))
tmp.add(l.substring(search.length()).trim());
} return tmp;
} public void putValue(String f, String v)
{
System.out.println("added");
header.add(f + ": " + v);
} public String getMethod()
{
return method;
} public String getVer()
{
return ver;
} public byte[] toBytes()
{
String tmp = "";
for(int i = 0; i < header.size(); i++)
{
String l = (String)header.get(i);
tmp = tmp + l;
tmp = tmp + ITP_CR;
} tmp = tmp + "\t\t";
tmp = tmp + ITP_CR;
return tmp.getBytes(); }}-------------------------------------------------------
我同情你们,你们程序员,不幸的星辰, 你们聪明而又晶莹, 乐于为迷途的老板照亮道路, 可没谁报答你们,不论神或人: 你们不恋爱,也从不知道爱! 永恒的时光带领你们 无休止地在广袤的空中行进。 你们走完了几多旅程, 自从老板沉湎在情人的怀抱里, 忘记了星已白,夜已深。