coco__007 2017-11-17 10:34 采纳率: 100%
浏览 979
已采纳

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();
    }
    

    }
    }

图片说明
图片说明

  • 写回答

1条回答

  • 果冻的猿宇宙 2017-11-17 10:40
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献