循环中的客户端服务器消息

时间:2015-01-26 06:44:35

标签: java sockets client communication server

我想至少从客户端向服务器发送两条消息,然后服务器响应这些消息。但是,只有一条消息从客户端发送,服务器也响应一个任何想法,我错了 这是我的server.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class server
{

    private static Socket socket;

    public static void main(String[] args)
    {
        try
        {

            int port = 25000;
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Server Started and listening to the port 25000");

            //Server is running always. This is done using this while(true) loop
            while(true)
            {
                //Reading the message from the client
                socket = serverSocket.accept();

                InputStream is = socket.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String sub = br.readLine();

                //string parsing
                String delims = "[.]";
                String[] tokens = sub.split(delims);    
                System.out.println("You have subscribed to  "+tokens[1]);
                String returnMessage="Subscription message received.";

                //Sending the response back to the client.
                OutputStream os = socket.getOutputStream();
                OutputStreamWriter osw = new OutputStreamWriter(os);
                BufferedWriter bw = new BufferedWriter(osw);
                bw.write(returnMessage);
                System.out.println("Message sent to the client is "+returnMessage);
                bw.flush();

                InputStream iss = socket.getInputStream();
                InputStreamReader isrr = new InputStreamReader(iss);
                BufferedReader brr = new BufferedReader(isrr);
                String subb = brr.readLine();
                System.out.println("Regular message received from client is "+subb);



                OutputStream oss = socket.getOutputStream();
                OutputStreamWriter osww = new OutputStreamWriter(oss);
                BufferedWriter bww = new BufferedWriter(osww);
                bww.write(subb);
                System.out.println("Message sent "+subb);
                bww.flush();


            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                socket.close();
            }
            catch(Exception e){}
        }
    }
}

这是我的client.java

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.InetAddress;
    import java.net.Socket;

    public class client

    {

    private static Socket socket;

    public static void main(String args[])
    {
        try
        {
            String host = "localhost";
            int port = 25000;
            InetAddress address = InetAddress.getByName(host);
            socket = new Socket(address, port);

            //Send the subscription message to the server
            OutputStream os = socket.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(osw);

            String subscribe= "Subscribe.nust";
            String sendMessage = subscribe + "\n";
            bw.write(sendMessage);
            bw.flush();
            System.out.println("Message sent to the server : "+sendMessage);

            //Get the return message from the server
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String message = br.readLine();
            System.out.println("Message received from the server : " +message);

            //Send the regualar message to the server
            OutputStream oss = socket.getOutputStream();
            OutputStreamWriter osww = new OutputStreamWriter(oss);
            BufferedWriter bww = new BufferedWriter(osww);

            String regular= "Because of the APS Peshawar attack that took place on 16th December 2014, nust is facing security issues.";
            String sendMessage2 = regular + "\n";
            bww.write(sendMessage2);
            bww.flush();
            System.out.println("Message sent to the server : "+sendMessage2);

            //Get the return message from the server
            InputStream iss = socket.getInputStream();
            InputStreamReader isrr = new InputStreamReader(iss);
            BufferedReader br1 = new BufferedReader(isrr);
            String msg = br1.readLine();
            System.out.println("Message received from the server : " +msg);

        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
        finally
        {
            //Closing the socket
            try
            {
                socket.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

不要在同一个套接字上继续创建新的BufferedReaders/Writers。在插座的使用寿命中使用相同的插座。你在缓冲区丢失了数据。

相关问题