关于java实现一对一聊天连续发消息的问题

下面的代码只能实现服务端和客户端你一句我一句聊天,要是有一方连续发几条消息就会崩溃,请问如何实现连续发消息这个功能,老师说要用到线程,求提供一点思路

客户端

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

public class SingleTalkClient
{
    public static void main(String[] args) throws IOException
    {

        Socket client = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            client = new Socket("172.16.122.27", 6677);
            out = new PrintWriter(client.getOutputStream(), true); //auto flush
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: 127.0.0.1.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: 127.0.0.1.");
            System.exit(1);
        }

        //从标准输入流(键盘)中获取信息
    BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

    String fromServer, fromUser;
    boolean sbye = false;
    boolean ubye = false;

    System.out.print("Client input:");
    fromUser = stdIn.readLine();
        while( true )  
    {
        if( ubye == false )
        {
            out.println(fromUser);
            out.flush();
            //System.out.println("Client: " + fromUser);
            if (fromUser.equals("Bye."))
                ubye = true;
        }

        if( sbye == false )
        {
            fromServer = in.readLine();
            System.out.println("from Server: " + fromServer);
            if (fromServer.equals("Bye."))
                sbye = true;
        }

        if( ubye == false )
        {
            System.out.print("Client input:");
            fromUser = stdIn.readLine();
        }

        if( ubye == true && sbye == true )
            break;
        }

        out.close();
        in.close();
        stdIn.close();
        client.close();
    }
}

服务端

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

public class SingleTalkServer
{
    public static void main(String[] args) throws IOException
    {

        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(6677);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(1);
        }

        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();  //程序将在此等候客户端的连接
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }
    System.out.println("Accept OK!");

        //打开输入/输出流
    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);  //auto flush
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                clientSocket.getInputStream()));

    //从标准输入流(键盘)中获取信息
        BufferedReader sin = new BufferedReader( new InputStreamReader( System.in ) );

    boolean  sinbye = false;
    boolean  inbye = false;
    String sinputLine, inputLine;

    inputLine = in.readLine();
    System.out.println( "from Client: " + inputLine );

    System.out.print("Server input:");
    sinputLine = sin.readLine();

        while( true )
    {
        if( sinbye == false )
        {
            out.println(sinputLine);
            out.flush();
            //System.out.println("Server: " + sinputLine);

            if (sinputLine.equals("Bye."))
                sinbye = true;
        }

        if( inbye == false )
        {
            inputLine = in.readLine();
            System.out.println( "from Client: " + inputLine );

            if (inputLine.equals("Bye."))
                inbye = true;
        }

        if( sinbye == false )
        {
            System.out.print("Server input:");
            sinputLine = sin.readLine();
        }

        if( sinbye == true && inbye == true )
            break;
        }

        out.close();
        in.close();
    sin.close();

        clientSocket.close();
        serverSocket.close();
    }
}

4个回答

那就发短信跟对方说别说太多

没做过,可以提个思路,加一个判断,如果客户端再次输入,而服务端前一个输入没有响应,就重启一个线程,当服务端有响应的时候,把除当前线程的其余线程都关闭。

你把客户端和服务器端的代码都使用线程操作,
让类继承Thread,然后重写run()方法,把处理的程序都放在里面,然后在主方法里:
ServerSocket serverSocket = new ServerSocket(9090);
while(true){
Socket socket = serverSocket.accept();
new SingleTalkServer(socket).start();

    }
    启动线程这样的。

把 接收或者发送的 代码写到线程里 就行

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