请教Java Socket高手一个“Java Socket工具的创建”中的技术点。

csdn_A_FANS 2016-06-12 08:38:08
小弟近日在写Java Socket程序的时候,遇到了一个“创建一个Java Socket工具“的具体需求。代码如下:

package s_port_package_BeiJing;


import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;

/**
* 剪切板工具类
*
* @author NeverChange
*
*/

public class SocketClient {

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 SocketClient(String ip, int port) {
try {
s = new Socket(ip, port);
if(port == 9911)//只要连接端口是9911的,我就在这停下,然后看代码的堆栈,就知道哪地方哥哥,堆栈怎么看,您能告诉弟吗?
{
//System.out.println("开始连接9911端口了,请注意");
}
//System.out.println(s);

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 = Systemcrypt.Recovery(str,"CJCO");
return str;
}
}
public void writeStr(String content, String MyThreadname,int myfuct,String MyObjNum,Socket s) throws NullPointerException{
MyThreadname = String.valueOf(Recv.MySystemserialnum);
if(this.out==null){
try {
// System.out.println(""myPort);
s = new Socket(Recv.Y_PORT_SERVER, 10018);
out = s.getOutputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
outStr = new PrintWriter(new OutputStreamWriter(out));
synchronized (this.out) {
/* String IP = GetMyUserIP.getMyIP();
//content = content.replaceAll("\n", "<br>");
*/ InetAddress addr = null;
try {
addr = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (this.out) {
String IP = GetMyUserIP.getMyIP();
content = content.replaceAll("\n", "<br>");
String str = content+"丗"+"C"+Recv.MySystemserialnum+"1" + "1" + "丗" + MyThreadname+MyObjNum;
// Stir = Systemcrypt.HloveyRC4(str, "CJCO");
outStr.println(str);//因为println默认会在每行的后面加上/r/n,所以不需要再重复加了,避免不必要的影响
// //////////System.out.println("=============================||||||||||||||||||||||||||||||||||||||||||||"+content+"丗"+IP+"丗"+MyThreadname);
outStr.flush();
}}
}

public void writeStr(String content, String MyThreadname,int myfuct,String MyObjNum,Socket s) throws NullPointerException{
MyThreadname = String.valueOf(Recv.MySystemserialnum);
if(this.out==null){
try {
// System.out.println(""myPort);
s = new Socket(Recv.S_PORT_SERVER, 10018);
out = s.getOutputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
outStr = new PrintWriter(new OutputStreamWriter(out));
synchronized (this.out) {
/* String IP = GetMyUserIP.getMyIP();
//content = content.replaceAll("\n", "<br>");
*/ InetAddress addr = null;
try {
addr = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (this.out) {
String IP = GetMyUserIP.getMyIP();
content = content.replaceAll("\n", "<br>");
String str = content+"丗"+"C"+Recv.MySystemserialnum+"1" + "1" + "丗" + MyThreadname+MyObjNum;
// Stir = Systemcrypt.HloveyRC4(str, "CJCO");
outStr.println(str);//因为println默认会在每行的后面加上/r/n,所以不需要再重复加了,避免不必要的影响
// //////////System.out.println("=============================||||||||||||||||||||||||||||||||||||||||||||"+content+"丗"+IP+"丗"+MyThreadname);
outStr.flush();
}}
}}

(上述为SocketClient辅助类)

package s_port_package_BeiJing;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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;

public SocketServer(int port) {
try {
ss = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
}

public Socket nextSocket() {
Socket s = null;
try {
s = ss.accept();
} catch (Exception e) {
}
System.out.println(" $$$$$$$$$$$$$$$$$ "+s);
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) {
e.printStackTrace();
// TODO Auto-generated catch block

}
}
if (rm != null) {
rm.clear();
}
if (wm != null) {
wm.clear();[code=vb]
}
if (ss != null) {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
// TODO Auto-generated catch block

}
}
}
}

(上述为SocketServer辅助类)
package s_port_package_BeiJing;

import java.net.Socket;

public class Test01 {
public static void main(String[] args){
SocketServer v = new SocketServer(1999);
Socket s = v.nextSocket();
SocketClient v9 = new SocketClient("127.0.0.1",1999);
v9.writeStr("成功!!", "myThreadname", s);
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

(上述为第一个运行的类型)
package s_port_package_BeiJing;

import java.io.IOException;

public class Test04 {
public static void main(String[] args){
SocketClient so = new SocketClient("127.0.0.1",1999);
so.writeLoginStr("String","name");
try {

String str = so.readStr();
System.out.println("方案一可行!!"+str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}[/code]
(上述为第二个运行的类型)
运行完毕,得到的结果如下:

求高手帮忙:
小弟的代码,错在哪里?如何修改?
...全文
338 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2016-06-16
  • 打赏
  • 举报
回复
Connection reset 一般是远程的主机没有打开端口,或者打开后又关闭了,导致你的SOCKET连接断开

62,628

社区成员

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

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