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条)

报告相同问题?

悬赏问题

  • ¥30 关于#硬件工程#的问题:求一下解题思路
  • ¥15 运筹学对偶单纯行法构造扩充问题
  • ¥20 XP系统的老电脑一开机就提示找不到rundll.exe,付费求解
  • ¥15 milvus查询出来的score怎么转换成0-1之间的相似性
  • ¥15 多ip服务器站群如何搭建l2tp服务器
  • ¥15 lvgl V9移植到linux开发板
  • ¥15 VB.net中在窗体中创建一个button控件来关闭窗体,但是提示错误,我该怎么办
  • ¥15 网上下载好的程序但是arduinoIDE编程报错,运行不了,哪里出错了,能具体给改一下吗
  • ¥15 Sharepoint JS开发 付费技术指导
  • ¥15 输入程序运行仿真后,烟雾值不实时检测,变成固定值