另外一个问题:
同样的Socket在一台机子是好的,而在另一台运行出现错误,请问如何解决?
package sms;
import java.io.*;
import java.net.*;
import java.math.*;
import sun.io.*;
import org.apache.log4j.Logger;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class SMSServer
extends java.lang.Thread {
private static final int SERVER_PORT = 26549;
static Logger logger = Logger.getLogger(SMSServer.class);
public SMSServer() {
}
public void run() {
try {
ServerSocket s = new ServerSocket(SERVER_PORT);
while (true) {
Socket socket = s.accept();
Thread t = new CreateServerThread(socket);
t.start();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
//--- 创建服务器线程
class CreateServerThread
extends Thread {
private Socket client;
public CreateServerThread(Socket s) throws IOException {
client = s;
}
public void run() {
try {
client.setSoTimeout(60000); //超时设置为1分钟
InputStream input = client.getInputStream();
OutputStream output = client.getOutputStream();
//定义变量-----------------------------------------------------------------
String id_origin = "0701";
String pwd_origin = "PP0701WW";
String src = null;
String dest = null;
String msg = null;
String svcID = null;
System.out.println("初始id=" + id_origin);
System.out.println("初始密码=" + pwd_origin);
byte[] sercert = new byte[4]; //密钥byte数组
byte[] b = new byte[1024];
byte[] c = new byte[9999]; //把每次循环得到的数组重新组合
ByteArray ba = new ByteArray();
int totalNum = 0;
int num = 0;
while (true) {
num = input.read(b);
System.out.println("num=" + num);
if (num == -1) {
byte[] after109 = new byte[1024];
byte[] after109_scercert = new byte[1024];
after109 = IntByte.getBytes(c, 16, 124);
after109_scercert = crpstr(sercert, after109, 109);
svcID = new String(IntByte.getBytes(after109_scercert, 0, 3)); 号码
System.out.println("服务号码=" + svcID);
break ;
}
c = ba.addByteArray(IntByte.getBytes(b, 0, num - 1)); //每次取得的字节数组相加,得到新的字节数组
totalNum += num;
System.out.println("totalnum=" + totalNum);
//-------把企业发送过来的数据包分两次解密,前12个字节解密一次,后109个字节解密一次--------------
if (totalNum >= 16) {
sercert = IntByte.getBytes(c, 12, 15); //取得密钥
System.out.println("sercert=" + new String(sercert));
//--------------------取得合作伙伴编号ID和密码-------------------------
byte[] idAndPwd = IntByte.getBytes(c, 0, 11); //取得伙伴ID和密码进行一次性解密
byte[] idAndPwd_scercert = crpstr(sercert, idAndPwd, 12);
String id = new String(IntByte.getBytes(idAndPwd_scercert, 0, 3)); //取得伙伴ID
}
}
input.close();
output.close();
client.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
问题总出现在 num = input.read(b);
提示连接断开
但是事实上没有断开的,而且在另一台上运行正常的,本地的端口都是打开的,请问是什么原因?在线等候
同样的Socket在一台机子是好的,而在另一台运行出现错误,请问如何解决?
package sms;
import java.io.*;
import java.net.*;
import java.math.*;
import sun.io.*;
import org.apache.log4j.Logger;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class SMSServer
extends java.lang.Thread {
private static final int SERVER_PORT = 26549;
static Logger logger = Logger.getLogger(SMSServer.class);
public SMSServer() {
}
public void run() {
try {
ServerSocket s = new ServerSocket(SERVER_PORT);
while (true) {
Socket socket = s.accept();
Thread t = new CreateServerThread(socket);
t.start();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
//--- 创建服务器线程
class CreateServerThread
extends Thread {
private Socket client;
public CreateServerThread(Socket s) throws IOException {
client = s;
}
public void run() {
try {
client.setSoTimeout(60000); //超时设置为1分钟
InputStream input = client.getInputStream();
OutputStream output = client.getOutputStream();
//定义变量-----------------------------------------------------------------
String id_origin = "0701";
String pwd_origin = "PP0701WW";
String src = null;
String dest = null;
String msg = null;
String svcID = null;
System.out.println("初始id=" + id_origin);
System.out.println("初始密码=" + pwd_origin);
byte[] sercert = new byte[4]; //密钥byte数组
byte[] b = new byte[1024];
byte[] c = new byte[9999]; //把每次循环得到的数组重新组合
ByteArray ba = new ByteArray();
int totalNum = 0;
int num = 0;
while (true) {
num = input.read(b);
System.out.println("num=" + num);
if (num == -1) {
byte[] after109 = new byte[1024];
byte[] after109_scercert = new byte[1024];
after109 = IntByte.getBytes(c, 16, 124);
after109_scercert = crpstr(sercert, after109, 109);
svcID = new String(IntByte.getBytes(after109_scercert, 0, 3)); 号码
System.out.println("服务号码=" + svcID);
break ;
}
c = ba.addByteArray(IntByte.getBytes(b, 0, num - 1)); //每次取得的字节数组相加,得到新的字节数组
totalNum += num;
System.out.println("totalnum=" + totalNum);
//-------把企业发送过来的数据包分两次解密,前12个字节解密一次,后109个字节解密一次--------------
if (totalNum >= 16) {
sercert = IntByte.getBytes(c, 12, 15); //取得密钥
System.out.println("sercert=" + new String(sercert));
//--------------------取得合作伙伴编号ID和密码-------------------------
byte[] idAndPwd = IntByte.getBytes(c, 0, 11); //取得伙伴ID和密码进行一次性解密
byte[] idAndPwd_scercert = crpstr(sercert, idAndPwd, 12);
String id = new String(IntByte.getBytes(idAndPwd_scercert, 0, 3)); //取得伙伴ID
}
}
input.close();
output.close();
client.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
问题总出现在 num = input.read(b);
提示连接断开
但是事实上没有断开的,而且在另一台上运行正常的,本地的端口都是打开的,请问是什么原因?在线等候
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货