socket TCP通讯 客户端一直循环输出welcome 求挑错

1.import java.io.*;
import java.net.*;

public class Server {
public static final int PORT=8888;
public static void main(String[] args) throws IOException{
ServerSocket ss=new ServerSocket(PORT);
System.out.println(ss);
try{
//记录客户端的数量
int count=0;
System.out.println("***服务器即将启动,等待客户端的连接***");
//循环监听,等待客户端的连接
while(true){
Socket socket=ss.accept();
//创建新线程
ServerThread serverThread=new ServerThread(socket);
//启动线程
serverThread.start();

            count++;
            System.out.println("客户端的数量:"+count);
            InetAddress address=socket.getInetAddress();
            System.out.println("当前客户端的IP:"+address.getHostAddress());
            }
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        ss.close();
    }

}

}

2.import java.io.*;
import java.net.*;

/*

  • 服务器线程处理类
    */
    public class ServerThread extends Thread{
    //和本线程相关的socket
    Socket socket=null;

    public ServerThread(Socket socket) {
    this.socket = socket;
    }

    //线程执行的操作,响应客户端的请求
    @Override
    public void run() {

    BufferedReader in=null;
    PrintWriter out=null;
    try{
        //获取输入输出流
        in=new BufferedReader(
               new InputStreamReader(
                   socket.getInputStream()));
        String info=null;
        while((info=in.readLine())!=null){
            System.out.println("我是服务器,客户端说"+info);
        }
        socket.shutdownInput();
    
        out=new PrintWriter(
                new BufferedWriter(
                    new OutputStreamWriter(
                        socket.getOutputStream())));
        out.println("welcome!");
        out.flush();//调用flush()方法将缓冲输出
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        try{
            if(in!=null)
                in.close();
            if(out!=null)
                out.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    

    }

}

3.import java.io.*;
import java.net.*;

/*

  • 客户端
    */
    public class Client {
    public static void main(String[] args)throws IOException {
    Socket socket=new Socket("localhost",Server.PORT);
    try{

    BufferedReader in=new BufferedReader(
    new InputStreamReader(
    socket.getInputStream()));

        PrintWriter out=new PrintWriter(
                            new BufferedWriter(
                                    new OutputStreamWriter(
                                            socket.getOutputStream())));
        out.println("用户名:mtone;密码:123");
        out.flush();
        //flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满
        socket.shutdownOutput();
    
        String info=null;
        info=in.readLine();
        while(info!=null){
            System.out.println("我是客户端,服务器说:"+info);
        }   
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        socket.close();
    }
    

    }
    }

图片说明
图片说明

2个回答

你的客户端里写着“while(info!=null)”就一直打印,而 info 确实不是 null,条件一直成立。

Mtone_007
Mtone_007 被自己蠢哭.....
接近 2 年之前 回复

我就插入一个代码片

 public class Main{
 public static void main(String []args){
     System.out.println("hello world");
     }
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!