简体   繁体   中英

Unable to receive data on server side (Java Socket Programming)

A single client connects to a single server. I'm unable to display the text sent from the client. Am I not sending the text properly from client or not receiving the text properly on Server? Is there another way to check from the code? (on client side that the data has been sent) or (on server side that the data has been received) package com.company; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Iterator; import java.util.Random;

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

    ChatServer chatServer = new ChatServer();
    chatServer.go();
}

private void go() throws IOException {

    //Generate a random number and write to a text file

    Random randomGenerator = new Random();
    int randomInt = 1024 + randomGenerator.nextInt(64511);
    PrintWriter printWriter = new PrintWriter("port.txt");
    printWriter.write(String.valueOf(randomInt));
    printWriter.flush();

    //Create Server on a port using that random number
    ServerSocket serverSocket = new ServerSocket(randomInt);
    System.out.println("Server on Port: "+randomInt);

    //Start Accepting Clients
    ClientHandler clientHandler= new ClientHandler(serverSocket);
    Thread t = new Thread(clientHandler);
    t.start();

}

private class ClientHandler implements Runnable {

    ServerSocket serverSocket;
    BufferedReader bufferedReader;
    PrintWriter writer;
    Socket socket;

    public ClientHandler(ServerSocket sSocket) throws IOException {

        serverSocket = sSocket;
    }


    public void run() {

        while (true)
        {
            String message;

            try {
                //Accept A connection and assign a socket for this client
                socket = serverSocket.accept();
                System.out.println("Connection Established");

                //Read Message
                InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
                bufferedReader = new BufferedReader(inputStreamReader);

                while( (message = bufferedReader.readLine()) != null)
                {

                    //Display it on the console
                    System.out.println("From Client: " + message);

                    //Send it back to the client
                    writer = new PrintWriter(socket.getOutputStream());
                    writer.println("Your message is: " + message);
                    writer.flush();

                    //Send your message
                    writer.write("This is default message");
                    writer.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

}

This is Client Side Code

package com.company;


import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class ChatClient {
Socket socket;

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

    ChatClient chatClient = new ChatClient();
    chatClient.go();
}

private void go() throws IOException {

    //Read Port number from file
    FileReader fileReader = new FileReader("port.txt");
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    int port = Integer.parseInt(bufferedReader.readLine());

    //Connect to socket on the port number
    System.out.println("Connecting to Server on: "+port);
    socket = new Socket("127.0.0.1",port);

    //Initiate sender thread
    ChatSender chatSender = new ChatSender(socket);
    Thread sender = new Thread(chatSender);

    //Initiate receiver thread
    ChatReceiver chatReceiver = new ChatReceiver(socket);
    Thread receiver = new Thread(chatReceiver);

    sender.start();
    receiver.start();
}

public class ChatSender implements Runnable
{
    BufferedWriter bufferedWriter;

    public ChatSender(Socket socket) throws IOException {

        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
        bufferedWriter = new BufferedWriter(outputStreamWriter);

    }

    public void run()
    {
        while (true)
        {
            //get text from console
            Scanner scanner = new Scanner(System.in);
            String input = scanner.nextLine();
            System.out.println("To Server: "+input);
            try {
                System.out.println("Sending data");
                //write to server
                bufferedWriter.write(input);

                //flush the text
                bufferedWriter.flush();
                System.out.println("sent data");
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}

public class ChatReceiver implements Runnable
{

    BufferedReader bufferedReader;

    public ChatReceiver(Socket socket) throws IOException {

        InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
        bufferedReader = new BufferedReader(inputStreamReader);
    }

    public void run()
    {
        try {
            while (true)
            {
                Thread.sleep(1000);
                System.out.println("Receiving data");
                String output = bufferedReader.readLine();
                System.out.print("From Server: "+output);
                System.out.println("Received data");
            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

}

Usual problem. You're reading lines, but you aren't sending lines. Change write() to println().

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM