java 简单的服务器端与多客户端通信异常的问题 2C

服务器端代码

package service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.zip.InflaterInputStream;

public class Server {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    ServerSocket ss = null;
    try {
        System.out.println("服务器已启动,等待客户端连接。。。");
        ss = new ServerSocket(8888);
        while (true) {
            Socket s = ss.accept();
            new serverthread(s).start();
            s.close();
        }

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}
class serverthread extends Thread {
Socket s = null;
String str;

public serverthread(Socket socket) {
    super();
    this.s = socket;
    System.out.println("一个客户端已经连接上");
}
PrintStream out=null;
BufferedReader in =null;
@Override
public void run() {
    // TODO Auto-generated method stub
    try {
        System.out.println(s.getLocalPort());
        out=new PrintStream(s.getOutputStream(), true);
        in=new BufferedReader(new InputStreamReader(s.getInputStream()));//获取客户端套接字输入输出流
        str=in.readLine();
        System.out.println("客户端用户名"+str);
        if (str.equals("JSIT")) {
            out.println("用户名正确");
        }else
            out.println("用户名不存在");

    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
}

}

客户端代码

package client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Clint2 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
   try {
    Socket s=new Socket("127.0.0.1", 8888);
    PrintStream out=new PrintStream(s.getOutputStream());
    BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
    BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
    System.out.print("用户名:");
    String str=stdin.readLine();
    out.println(str);
    System.out.println(in.readLine());
    in.close();
    out.close();
} catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}

}
我先运行了服务端,再运行客户端时会报socket is closed的异常,是什么原因?

2个回答

        Socket s = ss.accept();
        new serverthread(s).start();
        s.close();
                    你创建了线程去管理接收到的连接,那么这个Socket的close管理也应该交给这个线程去做。而你在主线程里面直接关闭,当然后出现异常。
                    这个地方不是顺序执行的,而是并行的。

你写反了吧,这是多个服务端与一个客户端的连接,而且多个服务端,用一个端口号,肯定报错

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问