请教Socket模拟http连接走cmwap通道连接远程服务器的问题
请教一下各位,有没有人做过socket模拟http连接走cmwap连接远程服务器的问题。程序已经经过了安全签名。
主要代码如下:
SocketConnection socket = (SocketConnection) Connector
.open("socket://" + "10.0.0.172:80");// 使用代理连接
DataOutputStream dos = new DataOutputStream(socket
.openOutputStream());
DataInputStream dis = new DataInputStream(socket.openInputStream());
// 发送数据
//封装实际要发送的消息块
StringBuffer bodyBuffer = new StringBuffer();
bodyBuffer.append("<C_MOST_NEW_MESSAGE>");
bodyBuffer.append("\r\n");
//封装http协议头消息块
StringBuffer headBuffer = new StringBuffer();
headBuffer
.append("POST http://remoteServerAddress:port HTTP/1.0\r\n");
headBuffer.append("Connection: close\r\n");
headBuffer.append("accept:*/*\r\n");
headBuffer
.append("Content-type: application/x-www-form-urlencoded\r\n");
headBuffer.append("Content-length: "
+ (bodyBuffer.toString().getBytes().length) + "\r\n");
headBuffer.append("\r\n");
//发送http头信息
dos.write(headBuffer.toString().getBytes());
//发送实际的消息体
dos.write(bodyBuffer.toString().getBytes());
dos.flush();
//发送完毕,等待接受回应消息
printResponseMessage(dis);//解析收到的回应消息
dos.close();
dis.close();
socket.close();
问题的现象是:发送消息完毕之后,要等待很久才能收到cmwap回应,responseCode: 502 或者是504
远程服务器绝对没有问题,普通的http连接通过。用socket模拟http就不行,初步估计的原因是socket模拟http通过cmwap时是否需要特殊的http头设置。
需要做过这个东东的帮忙一些,多谢各位了。
------解决方案--------------------恩,你自己写的http头不对:
headBuffer.append("POST " + url + " HTTP/1.1").append("\r\n");
headBuffer.append("Connection: Keep-Alive").append("\r\n");
headBuffer.append("Host: " + "10.0.0.172:80").append("\r\n");
headBuffer.append("User-Agent: Nokia3250/2.0 (04.14) SymbianOS/9.1 Series60/3.0 Profile/MIDP-
2.0 Configuration/CLDC-1.1").append("\r\n");//这个UA是我截获的3250的ua,具体
//自己来写
headBuffer.append("Content-Type: text/html").append("\r\n");
headBuffer.append("Accept: */*").append("\r\n");
headBuffer.append("x-wap-profile: http://uaprof.uni-wise.com/uaprof/UT/UT-T80.xml").
append("\r\n");
这样就差不多了
------解决方案--------------------楼主的问题是没有设置HOST,代理需要知道你把信息发送到主机。
有关长连接:
http是可以保持长连接的,设置Keep-Alive即可,服务器检测到这个http报头信息,就可以不断开tcp链接,这样避免了多次建立tcp链接的耗时。上面有些专家对这个问题的回答过于草率了。