站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题郁闷三天的小问题

郁闷三天的小问题

摘要: 郁闷三天的小问题



错误提示如下:
ServerSocket Started:ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8189]
java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:406)
at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:446)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:180)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at ServerOneJabber.run(MutiJabberServer.java:46)



代码:


import java.io.*;
import java.net.*;
public class MutiJabberServer {
public static final int PORT =8189;
public static void main(String[] args) throws IOException {
ServerSocket s = new ServerSocket(PORT);
System.out.println("ServerSocket Started:"+s);
try{
while(true){
Socket socket;
socket=s.accept();
new ServerOneJabber(socket);

socket.close();
}
}catch(Exception e){
s.close();
}finally{

}
}

}
class ServerOneJabber extends Thread{
private Socket socket;
private BufferedReader in;
private PrintWriter out;
ServerOneJabber(Socket s)
{
socket = s;
try{
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
start();
}catch(Exception e){
e.printStackTrace();
}
}
public void run()
{
try
{
while(true)
{
String str;
str = in.readLine();
if (str==null) break;
if (str.equals("END")) break;
System.out.println("Echoing: " + str);
out.println("From Server: " + str);
}
System.out.println("Closing...");
}
catch(Exception e)
{
e.printStackTrace();
try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}finally
{

}
}
}



import java.io.*;
import java.net.*;
public class JabberClient {
public static final int PORT = 8189;
public static void main(String[] args)
{
try
{
InetAddress addr = InetAddress.getByName(null);
//InetAddress addr = InetAddress.getByName("127.0.0.1");
//InetAddress addr = InetAddress.getByName("localhost");
System.out.println("addr: "+addr);
Socket socket = new Socket(addr,PORT);
System.out.println("Socket connected" + socket);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
/*for (int i=0 ;i<10;i++)
{
out.println("howdy"+i);
String str = in.readLine();
System.out.println(str);
}
System.out.println("END");
*/
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String s = sin.readLine();
out.println(s);
String str = in.readLine();
if (str.equals("END")==true) break;
System.out.println("From Server: " +str);

}
}catch(Exception e)
{
e.printStackTrace();
}

}
}



把你主函数中的“socket.close();”放到run中的逻辑执行完后再调用,在主函数中已经关了,下面就不能再用了


问题已解决
谢谢!


哈哈,好说


↑返回目录
前一篇: hql 如何指定用户?-lt
后一篇: 请教各位大哥: 画UML图最好是用什么工具? 谢谢!!!