高手,小弟写程序遇到了下面的报错场景:
package youHeart;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;public class SocketServer {
private ServerSocket ss = null;
private Map<Socket, BufferedReader> rm = new HashMap<Socket, BufferedReader>();
private Map<Socket, PrintWriter> wm = new HashMap<Socket, PrintWriter>();
String MyKey = "CJCO5888CJCO";
BufferedReader br = null;
PrintWriter pw = null;private Socket s;
private InputStream in;
private OutputStream out;
private BufferedInputStream inByte;
private OutputStream outByte;
private BufferedReader inStr;
private PrintWriter outStr;
public String MyObjIP = "";
private long size = 0; public SocketServer(int port) {
try {
ss = new ServerSocket(port);
} catch (IOException e) {
}
}
public void setSocket(Socket so){
s = so;
try {
out = s.getOutputStream();
in = s.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} inByte = new BufferedInputStream(in);
outByte = out; inStr = new BufferedReader(new InputStreamReader(in)); outStr = new PrintWriter(new OutputStreamWriter(out));
} public Socket nextSocket() {
Socket s = null;
try {
s = ss.accept();
} catch (Exception e) {
} return s;
} public String read(Socket s) throws IOException {
if (null == (br = rm.get(s))) {
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
rm.put(s, br);
}
String str = br.readLine();
str = Systemcrypt.Recovery(str,"CJCO");
return str;
} public void write(Socket s, String content) throws IOException {
if (null == (pw = wm.get(s))) {
pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
wm.put(s, pw);
}
content = Systemcrypt.HloveyRC4(content, "CJCO");
pw.println(content);
pw.flush();
} public void getMyResourceBack() {
if (pw != null) {
pw.close();
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
if (rm != null) {
rm.clear();
}
if (wm != null) {
wm.clear();
}
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
}
package youHeart;import java.io.File;public class YouHeart {
static String MyDportIP = "localhost";
static String MyTargetSportNum = "a1";
static String MyBelovedCenterNum = "a1";
static String myprojectversion = "1";
static String myUserNum = "a1";
static String my_Yport_Server_IP = "127.0.0.1";
static String MyMemIDPath = "D:" + File.separator + "MyDoc" + File.separator
+ "Sport" + File.separator + "registeredMemUID.txt";
static String MyMemPWDPath = "D:" + File.separator + "MyDoc" + File.separator
+ "Sport" + File.separator + "registeredMemPWD.txt";
static HashMap<String,Socket> socketlib = new HashMap<String,Socket>();//记录用户系统编号及其水管。
static HashMap<String,SocketClient> hmso = new HashMap<String,SocketClient>();
int todaymyuserNum = 0;
static SocketClient soo = null;
String MyYportUID = "D:\\MyDoc\\Yport\\YportUID.txt";
String MyYportPWD = "D:\\MyDoc\\Yport\\YportPWD.txt";
String MyNportCenter = "localhost";
String MyObjNum = "";
String MySysCenter = "N";
String MyUserInfo = "";
int myfuct = 0;
static HashMap<String,String> p2pmap = new HashMap<String,String>();
static SocketServer so = null;
static HashMap<String,Socket> lib = new HashMap<String,Socket>();//记录系统编号和其水管。
public YouHeart(String str){
try {
ReadTxt.read(MyYportUID);
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
for(int i =0;i<ReadTxt.logData.size();i++){
ChatServer.bufMemUID.add(ReadTxt.logData.get(i));
System.out.println("*************************"+ChatServer.bufMemUID.get(i));
}
ReadTxt.logData.clear();
try {
ReadTxt.read(MyYportPWD);
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
for(int i =0;i<ReadTxt.logData.size();i++){
ChatServer.bufMemPWD.add(ReadTxt.logData.get(i));
}
ReadTxt.logData.clear();
System.out.println("soo的值为"+soo);
System.out.println("\r\n");
so = new SocketServer(10018);
int r = 0;
try{
while(true){
Socket s = so.nextSocket();
so.setSocket(s);
try {
str = so.read(s);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Just close Line81,Watch next change");
// soo = new SocketClient(my_Yport_Server_IP,10018);
System.out.println("How come Line83 throws nullpointException");
System.out.println("系统接收到的当前最关心数据为"+str);
socketlib.put("N",s);
String[] str0 = str.split("龖");
for(int i= 0;i<str0.length;i++){
System.out.println(i+" 号索引的值为============= "+str0[i]);
}
System.out.println("系统所接收的数据为"+str);
String myfuct;
String MyUserNum;
String MyObjNum;
String MyUserRole;
String MyObjRole;
str0[1]="2881";
if(str0[1].equals("2881")){
// System.out.println("MyInfo-----|||||当前系统"+str0[3]+"端"+str0[1]+"用户发送的消息,系统最关心数据||||----"+str+"工作线程名为"+str0[6]);
myfuct = str0[0];
MyUserNum = str0[1];
MyObjNum = str0[2];
if(str0[3].equals("C")){
System.out.println("抓住");
}
MyUserRole = str0[3];
MyObjRole = str0[4];
if(r==0){
ChatServer myThread = new ChatServer(MyObjNum,MyUserRole);
Thread thread = new Thread(myThread);
thread.start();
r++;
}
Thread.sleep(2000);
// String myThreadname = str0[6];
}else{
myfuct = str0[0];
MyUserNum = str0[1];
MyObjNum = str0[2];
if(str0[3].equals("C")){
System.out.println("抓住");
}
MyUserRole = str0[3];
MyObjRole = str0[4];
String myThreadname = str0[6];
}
//【注意:】下面代码至【收尾】处,为重要重中之重代码。
if(MyUserRole.equals("C")){
socketlib.put("C"+MyUserNum, s);
}else if(MyUserRole.equals("S")){
socketlib.put("S"+MyUserNum,s);
}else if(MyUserRole.equals("D")){
socketlib.put("D"+MyUserNum,s);
}else if(MyUserRole.equals("Y")){
socketlib.put("Y"+MyUserNum, s);
}else{
socketlib.put("N"+MyUserNum, s);
}
//【收尾】
MyUserInfo = str0[5];
Test5 cjco = new Test5();//cjco记录用户“IP地址”及其“Socket水管”。
String IP = "";
cjco.put(IP,s);
socketlib.put(MyUserRole+MyUserNum, s);
switch(Integer.parseInt(myfuct)){
case 3: {// 已对照完毕.
//第一步:负责系统用户登陆面向SPort的“获取系统编号”的作业的“用户登录init中转站分支”.
socketlib.put(MyUserRole+String.valueOf(MyUserNum),s);
YouHeart.soo.ServerThread(YouHeart.socketlib.get(MyUserRole+MyUserNum)); if(!MyUserNum.equals("2881"))
break;
//【165行重要位置,修改为163与164行的精神】
break;
}
case 0://第二步:面向Sport面向每一位用户的登录进行的“回写系统编号”的init系统用户端的中转站分支.
{
// ManageTheChannel0ConfirmandSaveDS obj0 = new ManageTheChannel0ConfirmandSaveDS(String.valueOf(MyUserNum),
// MyUserInfo, MyObjNum,so,s);
// obj0.start();
// break;
}
case 1://面向每一位系统用户进行的“数据传输”功能分支.
// {
// socketlib.put(MyUserRole+MyUserNum,s);
// try {
// System.out.println("socketlib的Sa1键的值为"+socketlib.get("Sa1"));
// System.out.println("socketlib的Da1键的值为"+socketlib.get("Da1"));
// System.out.println("socketlib的Na1键的值为"+socketlib.get("Na1"));
// System.out.println("\r\n");
System.out.println("MyObjRole+MyObjNum的值为:"+MyObjRole+MyObjNum);
System.out.println("MyUserInfo的值为:"+MyUserInfo);
so.write(socketlib.get(MyObjRole+MyObjNum), MyUserInfo);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// break;
// }
case 2://面向每一个系统端点进行init的中转站分支.(包括数据中心,和子加盟服务器).
{
// socketlib.put(MyUserRole+MyUserNum, s);
//// socketlib.put(MyUserNum,s);
// break;
}
case 28:
{
// soo = new SocketClient(MyDportIP,10018);
// hmso.put(MyUserRole+MyUserNum, soo);
// break;
}
// }
}}}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
try{
new YouHeart("0龖0龖0龖加油");
}catch(Exception e){
e.printStackTrace();
}
}
// public void SendInfo(String MyUserRole,String MyUserNum,String MyObjRole,String todaymyuserNum,String myUserInfo,Socket s){
// p2pmap.put(String.valueOf(Integer.parseInt(todaymyuserNum)+1),MyUserRole+MyUserNum);
// socketlib.put(MyUserRole+MyUserNum,s);
// try {
// soo.write(socketlib.get(MyObjRole+MyObjNum), MyUserInfo);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
} 上述为“服务器端点”。
package Test091;import java.io.IOException;public class ServerP { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SocketClientS soooo = new SocketClientS("127.0.0.1",10018);
soooo.writeStr2("3", "a1", "ServerP", "0", "HELLO_I_AM_TOM");
String str = "";
while(true){
try {
str = soooo.readStr();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("+++++++++++++++++++++++++当前ServerP端点最关心数据"+str);
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
// soooo.writeStr2("1", "a1", "ServerP", "0", "HELLO_I_AM_TOM");
}
}
} 上述为“客户端”端点。
小弟运行上述两个类型的时候,首先运行了“服务器端点”,之后运行了“客户端端点”;
报出如下的故障:
高手,由于篇幅原因。下文请您见后面的补贴。
在此,感谢高手的过目!!
package youHeart;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;public class SocketServer {
private ServerSocket ss = null;
private Map<Socket, BufferedReader> rm = new HashMap<Socket, BufferedReader>();
private Map<Socket, PrintWriter> wm = new HashMap<Socket, PrintWriter>();
String MyKey = "CJCO5888CJCO";
BufferedReader br = null;
PrintWriter pw = null;private Socket s;
private InputStream in;
private OutputStream out;
private BufferedInputStream inByte;
private OutputStream outByte;
private BufferedReader inStr;
private PrintWriter outStr;
public String MyObjIP = "";
private long size = 0; public SocketServer(int port) {
try {
ss = new ServerSocket(port);
} catch (IOException e) {
}
}
public void setSocket(Socket so){
s = so;
try {
out = s.getOutputStream();
in = s.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} inByte = new BufferedInputStream(in);
outByte = out; inStr = new BufferedReader(new InputStreamReader(in)); outStr = new PrintWriter(new OutputStreamWriter(out));
} public Socket nextSocket() {
Socket s = null;
try {
s = ss.accept();
} catch (Exception e) {
} return s;
} public String read(Socket s) throws IOException {
if (null == (br = rm.get(s))) {
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
rm.put(s, br);
}
String str = br.readLine();
str = Systemcrypt.Recovery(str,"CJCO");
return str;
} public void write(Socket s, String content) throws IOException {
if (null == (pw = wm.get(s))) {
pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
wm.put(s, pw);
}
content = Systemcrypt.HloveyRC4(content, "CJCO");
pw.println(content);
pw.flush();
} public void getMyResourceBack() {
if (pw != null) {
pw.close();
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
if (rm != null) {
rm.clear();
}
if (wm != null) {
wm.clear();
}
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
}
package youHeart;import java.io.File;public class YouHeart {
static String MyDportIP = "localhost";
static String MyTargetSportNum = "a1";
static String MyBelovedCenterNum = "a1";
static String myprojectversion = "1";
static String myUserNum = "a1";
static String my_Yport_Server_IP = "127.0.0.1";
static String MyMemIDPath = "D:" + File.separator + "MyDoc" + File.separator
+ "Sport" + File.separator + "registeredMemUID.txt";
static String MyMemPWDPath = "D:" + File.separator + "MyDoc" + File.separator
+ "Sport" + File.separator + "registeredMemPWD.txt";
static HashMap<String,Socket> socketlib = new HashMap<String,Socket>();//记录用户系统编号及其水管。
static HashMap<String,SocketClient> hmso = new HashMap<String,SocketClient>();
int todaymyuserNum = 0;
static SocketClient soo = null;
String MyYportUID = "D:\\MyDoc\\Yport\\YportUID.txt";
String MyYportPWD = "D:\\MyDoc\\Yport\\YportPWD.txt";
String MyNportCenter = "localhost";
String MyObjNum = "";
String MySysCenter = "N";
String MyUserInfo = "";
int myfuct = 0;
static HashMap<String,String> p2pmap = new HashMap<String,String>();
static SocketServer so = null;
static HashMap<String,Socket> lib = new HashMap<String,Socket>();//记录系统编号和其水管。
public YouHeart(String str){
try {
ReadTxt.read(MyYportUID);
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
for(int i =0;i<ReadTxt.logData.size();i++){
ChatServer.bufMemUID.add(ReadTxt.logData.get(i));
System.out.println("*************************"+ChatServer.bufMemUID.get(i));
}
ReadTxt.logData.clear();
try {
ReadTxt.read(MyYportPWD);
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
for(int i =0;i<ReadTxt.logData.size();i++){
ChatServer.bufMemPWD.add(ReadTxt.logData.get(i));
}
ReadTxt.logData.clear();
System.out.println("soo的值为"+soo);
System.out.println("\r\n");
so = new SocketServer(10018);
int r = 0;
try{
while(true){
Socket s = so.nextSocket();
so.setSocket(s);
try {
str = so.read(s);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Just close Line81,Watch next change");
// soo = new SocketClient(my_Yport_Server_IP,10018);
System.out.println("How come Line83 throws nullpointException");
System.out.println("系统接收到的当前最关心数据为"+str);
socketlib.put("N",s);
String[] str0 = str.split("龖");
for(int i= 0;i<str0.length;i++){
System.out.println(i+" 号索引的值为============= "+str0[i]);
}
System.out.println("系统所接收的数据为"+str);
String myfuct;
String MyUserNum;
String MyObjNum;
String MyUserRole;
String MyObjRole;
str0[1]="2881";
if(str0[1].equals("2881")){
// System.out.println("MyInfo-----|||||当前系统"+str0[3]+"端"+str0[1]+"用户发送的消息,系统最关心数据||||----"+str+"工作线程名为"+str0[6]);
myfuct = str0[0];
MyUserNum = str0[1];
MyObjNum = str0[2];
if(str0[3].equals("C")){
System.out.println("抓住");
}
MyUserRole = str0[3];
MyObjRole = str0[4];
if(r==0){
ChatServer myThread = new ChatServer(MyObjNum,MyUserRole);
Thread thread = new Thread(myThread);
thread.start();
r++;
}
Thread.sleep(2000);
// String myThreadname = str0[6];
}else{
myfuct = str0[0];
MyUserNum = str0[1];
MyObjNum = str0[2];
if(str0[3].equals("C")){
System.out.println("抓住");
}
MyUserRole = str0[3];
MyObjRole = str0[4];
String myThreadname = str0[6];
}
//【注意:】下面代码至【收尾】处,为重要重中之重代码。
if(MyUserRole.equals("C")){
socketlib.put("C"+MyUserNum, s);
}else if(MyUserRole.equals("S")){
socketlib.put("S"+MyUserNum,s);
}else if(MyUserRole.equals("D")){
socketlib.put("D"+MyUserNum,s);
}else if(MyUserRole.equals("Y")){
socketlib.put("Y"+MyUserNum, s);
}else{
socketlib.put("N"+MyUserNum, s);
}
//【收尾】
MyUserInfo = str0[5];
Test5 cjco = new Test5();//cjco记录用户“IP地址”及其“Socket水管”。
String IP = "";
cjco.put(IP,s);
socketlib.put(MyUserRole+MyUserNum, s);
switch(Integer.parseInt(myfuct)){
case 3: {// 已对照完毕.
//第一步:负责系统用户登陆面向SPort的“获取系统编号”的作业的“用户登录init中转站分支”.
socketlib.put(MyUserRole+String.valueOf(MyUserNum),s);
YouHeart.soo.ServerThread(YouHeart.socketlib.get(MyUserRole+MyUserNum)); if(!MyUserNum.equals("2881"))
break;
//【165行重要位置,修改为163与164行的精神】
break;
}
case 0://第二步:面向Sport面向每一位用户的登录进行的“回写系统编号”的init系统用户端的中转站分支.
{
// ManageTheChannel0ConfirmandSaveDS obj0 = new ManageTheChannel0ConfirmandSaveDS(String.valueOf(MyUserNum),
// MyUserInfo, MyObjNum,so,s);
// obj0.start();
// break;
}
case 1://面向每一位系统用户进行的“数据传输”功能分支.
// {
// socketlib.put(MyUserRole+MyUserNum,s);
// try {
// System.out.println("socketlib的Sa1键的值为"+socketlib.get("Sa1"));
// System.out.println("socketlib的Da1键的值为"+socketlib.get("Da1"));
// System.out.println("socketlib的Na1键的值为"+socketlib.get("Na1"));
// System.out.println("\r\n");
System.out.println("MyObjRole+MyObjNum的值为:"+MyObjRole+MyObjNum);
System.out.println("MyUserInfo的值为:"+MyUserInfo);
so.write(socketlib.get(MyObjRole+MyObjNum), MyUserInfo);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// break;
// }
case 2://面向每一个系统端点进行init的中转站分支.(包括数据中心,和子加盟服务器).
{
// socketlib.put(MyUserRole+MyUserNum, s);
//// socketlib.put(MyUserNum,s);
// break;
}
case 28:
{
// soo = new SocketClient(MyDportIP,10018);
// hmso.put(MyUserRole+MyUserNum, soo);
// break;
}
// }
}}}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
try{
new YouHeart("0龖0龖0龖加油");
}catch(Exception e){
e.printStackTrace();
}
}
// public void SendInfo(String MyUserRole,String MyUserNum,String MyObjRole,String todaymyuserNum,String myUserInfo,Socket s){
// p2pmap.put(String.valueOf(Integer.parseInt(todaymyuserNum)+1),MyUserRole+MyUserNum);
// socketlib.put(MyUserRole+MyUserNum,s);
// try {
// soo.write(socketlib.get(MyObjRole+MyObjNum), MyUserInfo);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
} 上述为“服务器端点”。
package Test091;import java.io.IOException;public class ServerP { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SocketClientS soooo = new SocketClientS("127.0.0.1",10018);
soooo.writeStr2("3", "a1", "ServerP", "0", "HELLO_I_AM_TOM");
String str = "";
while(true){
try {
str = soooo.readStr();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("+++++++++++++++++++++++++当前ServerP端点最关心数据"+str);
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
// soooo.writeStr2("1", "a1", "ServerP", "0", "HELLO_I_AM_TOM");
}
}
} 上述为“客户端”端点。
小弟运行上述两个类型的时候,首先运行了“服务器端点”,之后运行了“客户端端点”;
报出如下的故障:
高手,由于篇幅原因。下文请您见后面的补贴。
在此,感谢高手的过目!!
package youHeart;
public class SocketServer {
private ServerSocket ss = null;
private Map<Socket, BufferedReader> rm = new HashMap<Socket, BufferedReader>();
private Map<Socket, PrintWriter> wm = new HashMap<Socket, PrintWriter>();
String MyKey = "CJCO5888CJCO";
BufferedReader br = null;
PrintWriter pw = null;private Socket s;
private InputStream in;
private OutputStream out;
private BufferedInputStream inByte;
private OutputStream outByte;
private BufferedReader inStr;
private PrintWriter outStr;
public String MyObjIP = "";
private long size = 0; public SocketServer(int port) {
try {
ss = new ServerSocket(port);
} catch (IOException e) {
}
}
public void setSocket(Socket so){
s = so;
try {
out = s.getOutputStream();
in = s.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} inByte = new BufferedInputStream(in);
outByte = out; inStr = new BufferedReader(new InputStreamReader(in)); outStr = new PrintWriter(new OutputStreamWriter(out));
} public Socket nextSocket() {
Socket s = null;
try {
s = ss.accept();
} catch (Exception e) {
} return s;
} public String read(Socket s) throws IOException {
if (null == (br = rm.get(s))) {
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
rm.put(s, br);
}
String str = br.readLine();
str = Systemcrypt.Recovery(str,"CJCO");
return str;
} public void write(Socket s, String content) throws IOException {
if (null == (pw = wm.get(s))) {
pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
wm.put(s, pw);
}
content = Systemcrypt.HloveyRC4(content, "CJCO");
pw.println(content);
pw.flush();
} public void getMyResourceBack() {
if (pw != null) {
pw.close();
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
if (rm != null) {
rm.clear();
}
if (wm != null) {
wm.clear();
}
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
}
上文为“SocketServer”这个“封装后的ServerSocket的API”的源代码。
package Test091;
/**
* 剪切板工具类
*
* @author NeverChange
*
*/public class SocketClientS { public Socket getS() {
return s;
} public void setS(Socket s) {
this.s = s;
} static Socket s;
private InputStream in;
private OutputStream out;
private BufferedInputStream inByte;
private OutputStream outByte;
private BufferedReader inStr;
private PrintWriter outStr;
public String MyObjIP = "";
private long size = 0;private ServerSocket ss = null;
private Map<Socket, BufferedReader> rm = new HashMap<Socket, BufferedReader>();
private Map<Socket, PrintWriter> wm = new HashMap<Socket, PrintWriter>();
String MyKey = "CJCO5888CJCO";
BufferedReader br = null;
PrintWriter pw = null; public SocketClientS(String ip, int port) {
try {
s = new Socket(ip, port);
if(port == 9911)//只要连接端口是9911的,我就在这停下,然后看代码的堆栈,就知道哪地方哥哥,堆栈怎么看,您能告诉弟吗?
{
//System.out.println("开始连接9911端口了,请注意");
}
in = s.getInputStream();
out = s.getOutputStream();
MyObjIP = ip;
inByte = new BufferedInputStream(in);
outByte = out; inStr = new BufferedReader(new InputStreamReader(in)); outStr = new PrintWriter(new OutputStreamWriter(out));
} catch (Exception e) {
}
} public String readStr() throws IOException {
if (null == (br = rm.get(s))) {
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
rm.put(s, br);
}
String str0 = br.readLine();
str0 = Systemcrypt.Recovery(str0,"CJCO");
synchronized (this.in) {
String str = this.inStr.readLine();
return str;
}
} public File readToFile(File file) throws IOException {
synchronized (this.in) {
FileOutputStream fos = new FileOutputStream(file);
byte[] temp = new byte[1024 * 8];
int count = 0;
while (-1 != (count = this.inByte.read(temp))) {
fos.write(temp, 0, count);
fos.flush();
}
fos.close();
return file;//跑接收端的TestSendInfo与发送端的Client.
}
} public void writeFile(File file) {
synchronized (this.out) {
size = file.length();
this.noticeFileSize(size); FileInputStream fis;
try {
fis = new FileInputStream(file);
byte[] temp = new byte[1024 * 8];
int count = 0;
while (-1 != (count = fis.read(temp))) {
this.outByte.write(temp, 0, count);
this.outByte.flush();
}
fis.close();
} catch (Exception e) {
}
}
} private void noticeFileSize(long l) {
String str = l + "";
int j = 19 - str.length();
for (int i = 0; i < j; i++) {
str = "0" + str;
}
this.writeByByte(str);
} protected void writeByByte(String content) {
synchronized (this.out) {
try {
this.out.write(content.getBytes());
this.out.flush();
} catch (IOException e) {
}
}
} private long getServerReceiveSize() {
synchronized (in) {
byte[] b = new byte[19];
try {
this.in.read(b);
} catch (IOException e) {
} return Long.parseLong(new String(b));
}
} public String getProgress() {
long l = this.getServerReceiveSize() / (size / 100);
if (100 == l) {
return null;
}
return l + " %";
}
public void getMyResourceBack() {
if (s != null) {
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
if (inStr != null) {
try {
inStr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
if (outStr != null) {
outStr.close();
}
}
public void writeStr(String str, String myThreadname, int myfuct,
Integer chatPartnerSerialMark) {
// TODO Auto-generated method stub
String myInfo = "str"+"丗"+myThreadname +"丗"+"1"+"丗"+chatPartnerSerialMark;
}
public void write(Socket s, String content) throws IOException {
if (null == (pw = wm.get(s))) {
pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
wm.put(s, pw);
}
content = Systemcrypt.HloveyRC4(content, "CJCO");
pw.println(content);
pw.flush();
} public void writeStr0(String myfuctnum,String myObjNum, String myThreadname) {
// TODO Auto-generated method stub
synchronized (this.out) {
String IP = GetMyUserIP.getMyIP();
String str = myfuctnum+"龖"+"a1"+"龖"+myObjNum+"龖"+"D"+"龖"+"Y"+"龖"+MyJButtonLogin.MyUID+"丗"+MyJButtonLogin.MyPWD+"丗"+"D"+"丗"+IP+"龖"+myThreadname;
ServerThread(s);
outStr.println(str);//因为println默认会在每行的后面加上/r/n,所以不需要再重复加了,避免不必要的影响
outStr.flush();
}
}
public void writeStr1(String myfuctnum,String myObjNum, String myThreadname,String mydportfuct,String mydportsubfuct,String mySocketData) {
// TODO Auto-generated method stub
synchronized (this.out) {
String IP = GetMyUserIP.getMyIP();
String content0 = "";
myThreadname = "";
String str = myfuctnum+"龖"+"a1"+"龖"+myObjNum+"龖"+"D"+"龖"+"D" +"龖"+mydportfuct+"丗"+mydportsubfuct+"丗"+"C"+"丗"+"a1"+"丗"+mySocketData+"丗"+"D"+"丗"+"BeiJing"+"丗"+IP+"丗"+myThreadname+"龖"+myThreadname;
ServerThread(s);
outStr.println(str);//因为println默认会在每行的后面加上/r/n,所以不需要再重复加了,避免不必要的影响
outStr.flush();
}
}
//用于完成Y向Sport写入数据,数据首先经过Yport,Yport经过判断,把数据写给Sport,代码如下。
public void writeStr2(String myfuctnum,String myObjNum, String myThreadname,String mysportfuct,String mySocketData) {
// TODO Auto-generated method stub
// synchronized (this.out) {
String IP = GetMyUserIP.getMyIP();
myThreadname = "";
String str = myfuctnum+"龖"+"a1"+"龖"+myObjNum+"龖"+"D"+"龖"+"S" +"龖"+mysportfuct+"丗"+mySocketData+"丗"+"D"+"丗"+"S"+"丗"+"a1"+"丗"+IP+"丗"+myThreadname+"丗"+1+"龖"+myThreadname;
ServerThread(s);
outStr.println(str);//因为println默认会在每行的后面加上/r/n,所以不需要再重复加了,避免不必要的影响
outStr.flush();
// }
} public void writeStr3(String myfuctnum,String myObjNum,String mycportfuct,String mySocketData,String myThreadname){
synchronized (this.out) {
String IP = GetMyUserIP.getMyIP();
InetAddress addr = null;
try {
addr = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String ip=addr.getHostAddress().toString();
String AP = "a1"+"龖"+myObjNum+"龖"+"Y"+"龖"+"C"+"龖";
String CP = mycportfuct+"丗"+"9"+"丗"+mySocketData+"丗"+"Y"+"丗"+ip+"丗"+"SocketClient"+"龖"+myThreadname;
String str = myfuctnum + "龖" + AP +CP;
ServerThread(s);
//str.replaceAll("", replacement)
synchronized(s){
outStr.println(str);//因为println默认会在每行的后面加上/r/n,所以不需要再重复加了,避免不必要的影响
}
outStr.flush();
}}
//由节点向N节点写出数据,数据首先经过Y节点,之后进入目标节点N。
public void writeStr4(String myfuctnum,String myObjNum, String myThreadname,String mydportfuct,String mydportsubfuct,String mySocketData) {
// TODO Auto-generated method stub
synchronized (this.out) {
String IP = GetMyUserIP.getMyIP();
myThreadname = "";
ServerThread(s);
String str = myfuctnum+"龖"+mySocketData+"龖"+DRecv0.myprojectversion+"龖"+DRecv0.MyDportNum+"龖"+"D" +"龖"+mydportfuct+"丠"+
mydportsubfuct+"丠"+"Y"+"丠"+"a1"+"丠"+mySocketData+"丠"+""+"丠"+"小区D节点运营商所在营业地址"+"丠"+IP+"丠"+myThreadname+"龖"+myThreadname;
outStr.println(str);//因为println默认会在每行的后面加上/r/n,所以不需要再重复加了,避免不必要的影响
outStr.flush();
}
}
public void ServerThread(Socket s){
try {
in = s.getInputStream();
out = s.getOutputStream();
inByte = new BufferedInputStream(in);
outByte = out; inStr = new BufferedReader(new InputStreamReader(in)); outStr = new PrintWriter(new OutputStreamWriter(out));
} catch (Exception e) {
}
}}
(上文为“SocketClientS”这个“封装了Socket的API”的源代码)
package Test091;
/**
* 程序入口类:系统上帝之手端点.
*
* @author 楚留香 <如转载请保留作者和出处>
* @q-zone http://user.qzone.qq.com/745083865/infocenter?ptsig=EDxu09--a8Psawk9ZTT5c-VHXcfcRnqVjwC3dCNjLXo_
*/
public class Systemcrypt {
static String str1 = "";
public static String HloveyRC4(String aInput, String aKey) {//哥哥,这是加密方法
if(1==1)return aInput;
int len = aInput.length();
char[] ch = aInput.toCharArray();
for(int i =0;i<len;i++){
ch[i]=(char)(ch[i]+10);
}
return new String(ch);
// if(1==1)
// return aInput;
// int[] iS = new int[10240];
// byte[] iK = new byte[1024];
//
// for (int i = 0; i < 256; i++)
// iS[i] = i;
//
// int j = 1;
//
// for (short i = 0; i < 256; i++) {
// iK[i] = (byte) aKey.charAt((i % aKey.length()));
// }
//
// j = 0;
//
// for (int i = 0; i < 255; i++) {
// j = (j + iS[i] + iK[i]) % 256;
// int temp = iS[i];
// iS[i] = iS[j];
// iS[j] = temp;
// }
//
// int i = 0;
// j = 0;
// char[] iInputChar = aInput.toCharArray();
// char[] iOutputChar = new char[iInputChar.length];
// for (short x = 0; x < iInputChar.length; x++) {
// i = (i + 1) % 512;
// j = (j + iS[i]) % 256;
// int temp = iS[i];
// iS[i] = iS[j];
// iS[j] = temp;
// int t = (iS[i] + (iS[j] % 256)) % 16;
// int iY = iS[t];
// char iCY = (char) iY;
// iOutputChar[x] = (char) (iInputChar[x] ^ iCY);
// }
//
// return new String(iOutputChar); }
public static String Recovery(String aInput,String aKey){//这是解密方法
if(1==1)
return aInput;
int len = aInput.length();
char[] ch = aInput.toCharArray();
for(int i =0;i<len;i++){
ch[i]=(char)(ch[i]-10);
}
return new String(ch);
}
public static void main(String[] str){
// str0 = HloveyRC4(str0,"CJCO");
// //System.out.println(str0);
// str1 = Recovery(str0,"CJCO");
//System.out.println(str1);
}
}
(上文为加密字符串的一个加密类型的源代码)
package Test091;import java.net.Socket;
import java.util.HashMap;
import java.util.Map;class Test5{
static Map<String, Socket> map = new HashMap<String, Socket>();
static Map<Socket, String> map0 = new HashMap<Socket, String>();
public Test5(){
}public void put(String IP, Socket socket) {
map.put(IP, socket);
map0.put(socket, IP);
}public static Socket get(String IP){
return map.get(IP);
}public String get0(Socket s){
return map0.get(s);
}
}
(上文为一个整合了两个存储了系统端点Socket水管的类型的源代码)
高手,由于篇幅原因,弟的帖子,有几个类型没有加导包语句。希望高手,能够知悉。
求高手支招:
小弟的代码,错在哪里?如何修改?
这个代码现场如果再精简的话,反而会耽误高手的过目时间。
希望高手,NewMoons哥,能够帮衬!!
谢谢NewMoons哥的到场!!
1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。
2,一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。你的错误是客户端报的,那说明服务器端的socket不知什么原因断开了,检查下。