bobby9699 2017-04-05 13:06 采纳率: 100%
浏览 2463
已采纳

关于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条回答 默认 最新

  • WeYoungg 2017-04-05 13:27
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试