现在有个定时器,固定时间去
用socket客户端发送指令往server端,
一个类单独写两个方法用于发送指令和接受server端返回的消息,此类的构造函数中从定时器端传入InputStreamReader和BufferedReader。
问题:单独运行定时器时没问题,但于socket一起就不能发送消息到server端,server端也接受不到请求信息。
现象:当发送请求方法发送完一条指令关闭时就可以发送出去,server也可以接受到,但当接受方法接受返回消息时报异常---connetion reset怎么解决?
用socket客户端发送指令往server端,
一个类单独写两个方法用于发送指令和接受server端返回的消息,此类的构造函数中从定时器端传入InputStreamReader和BufferedReader。
问题:单独运行定时器时没问题,但于socket一起就不能发送消息到server端,server端也接受不到请求信息。
现象:当发送请求方法发送完一条指令关闭时就可以发送出去,server也可以接受到,但当接受方法接受返回消息时报异常---connetion reset怎么解决?
解决方案 »
- 急问工程打成jar包后,找不到工程里用的properties的路径,请问如何解决,除了在环境变量里配置(内部有代码)
- java垃圾回收的疑问
- 帮我看一下为何swing的JButton鼠标事件与JButton的setEnabled有这样情况?
- 问个换皮肤的问题
- 有关JAVA命令行资源释放的问题
- 又来送分了
- 想请问各位朋友一个问题
- sql sever2000与 java 的连接
- jbuilder7LicenseGen 怎么注册?
- java 基础:Swing中的按钮太难看了,怎样改变模式呢?
- where can i get an open-source Internet Explorer written in Java?
- 请教一个java代码书写规范的问题
当你的socket与server建立连接后
没有等到server传送数据就关闭了连接
就会出现connetion reset。
还是没搞定,我把代码贴出,请帮忙看哈问题何在!!!一:定时器中用到调用socket客户端的方法
public void start(){
int[] weeksday = getWeeksDay(days); AbcCustomerIterator abcScheduler = new AbcCustomerIterator(dayStartHour,dayEndHour,dayStartMinute,dayEndMinute,internal,startTime,weeksday);
scheduler.schedule(new SchedulerTask(){
public void run() {
//abcDoSomething(); // 定时去完成的某个事项的方法
tc.sendMessage("....rrrrr"); //tc---封装的socket类
}
}, abcScheduler);
}二:socket客户端类public class MessageTransact {
private InputStreamReader in;
private BufferedReader br;
private OutputStreamWriter out;
private Socket socket; public MessageTransact(Socket socket,BufferedReader br,OutputStreamWriter out){
this.socket = socket;
this.br = br;
this.out = out;
}
public void sendMessage(String requestMessage){ //发送指令方法
try {
out.write(requestMessage);
out.flush();
} catch (IOException e) {
e.printStackTrace();
System.out.println("writer serversocket ioException");
}
}
public String acceptMessage(){ //---接受serversocket方法
StringBuffer xml = new StringBuffer("");
String results = null; try {
results = br.readLine();
} catch (IOException e) {
e.printStackTrace();
System.out.println("reader serversocket line ioexception");
}
while(results != null && results.length() > 0){
xml.append(results);
}
return xml.toString();
}
}三:server端 -- 测试public class TestServer {
public static void main(String args[]){
try {
ServerSocket ss = new ServerSocket(8855);
Socket socket = ss.accept();
BufferedReader readerClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream writerClient = new PrintStream(socket.getOutputStream(),true);
writerClient.println("link server is ok@!");
String temp = "";
boolean b = false;
while(!b){
System.out.println("echo:"+temp);
temp = readerClient.readLine();
writerClient.println("echo: "+temp);
writerClient.flush();
if(temp.equals("bye")){
b = true;
//return;
}
}
writerClient.close();
readerClient.close();
ss.close();
} catch (IOException e) {
}
}
}
应该是永远读不到BYE,所以服务端不会终止,建议在送的消息里面加个换行然后加上bye