郁闷三天的小问题
问?:
错误提示如下:
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();
}
}
}
答!: 1:
把你主函数中的“socket.close();”放到run中的逻辑执行完后再调用,在主函数中已经关了,下面就不能再用了
答!: 2:
问题已解决
谢谢!
谢谢!
答!: 3:
哈哈,好说
相关JAVA教程:
共享一些面试题
如何在JBuilder中象MsgBox一样弹出一个对话框?
interface如何定义和使用?
新手提问:关于freemarker的问题?
谁有没有删除hibernate一条记录的好点的方法。我对现有的方法受够了。
关于Spring控制器的一点点疑惑
jboss4下如何部署 web程序?
为什么错啊,各位来帮帮我啊
jboss到底用的多不多?
EJB的server和client分别在两个不同的机器上,用RMI访问速度其慢,怎么提高效率阿??
难题,将JAVA绘制的图形输出JPEG文件,
大牛来讲一下在java里调用webservices方式吧