请教高手一个Java Socket的入门级的小问题。

CJCO_a_One_Fans 2016-08-04 12:54:33
高手,小弟写程序遇到了下面的报错场景:
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");
}
}
}

上述为“客户端”端点。
小弟运行上述两个类型的时候,首先运行了“服务器端点”,之后运行了“客户端端点”;
报出如下的故障:

高手,由于篇幅原因。下文请您见后面的补贴。
在此,感谢高手的过目!!
...全文
267 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewMoons 2016-08-04
  • 打赏
  • 举报
回复
你的小问题太长,高手表示没有时间浏览,能否再精简下?
CJCO_a_One_Fans 2016-08-04
  • 打赏
  • 举报
回复
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水管的类型的源代码) 高手,由于篇幅原因,弟的帖子,有几个类型没有加导包语句。希望高手,能够知悉。 求高手支招: 小弟的代码,错在哪里?如何修改?
CJCO_a_One_Fans 2016-08-04
  • 打赏
  • 举报
回复
高手,上文中的代码,还有三个辅助类需要交待一下:
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”的源代码)
NewMoons 2016-08-04
  • 打赏
  • 举报
回复
我拷贝源代码的时候不是报重复就是还有找不到的类比如:ReadTxt、GetMyUserIP、DRecv0、ChatServer等等,太多列不完了。 你是不是从网上找的例子啊? 一般来说,引起该异常的原因有两个: 1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。 2,一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。 你的错误是客户端报的,那说明服务器端的socket不知什么原因断开了,检查下。
CJCO_a_One_Fans 2016-08-04
  • 打赏
  • 举报
回复
引用
你的小问题太长,高手表示没有时间浏览,能否再精简下?
NewMoons哥,小弟的这个代码场景,已经全部把源代码贴完整了。您如果要浏览的话,只要把所有的类型拷贝到本地,就可以获得‘’调试模式”的状态了。 这个代码现场如果再精简的话,反而会耽误高手的过目时间。 希望高手,NewMoons哥,能够帮衬!! 谢谢NewMoons哥的到场!!

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧