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 MATLAB动图的问题
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名