coco__007 2017-11-17 10:34 采纳率: 83.3%
浏览 973
已采纳

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条回答

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 求一个超难的动态新增元素的 click 事件无效的解决办法。
      • ¥20 怎么修改mediawiki允许上传的文件大小?
      • ¥15 agrySEXPAYm 是毒吗
      • ¥50 Java实现注册登录实现数据库增删改查功能,数据库至少两个表
      • ¥20 求解R语言的数据分析问题
      • ¥20 求GD32F105和305解除读保护方法教程
      • ¥15 C++代码优化,复杂度太高,无法通过clang-tidy检查,用什么办法可以优=化
      • ¥15 关于跨链隐私保护方案
      • ¥15 node mongodb 根据id给子集合list添加对象 请问应该如何操作
      • ¥50 如何得到路径下的绝对路径并且回传到list上