簡體   English   中英

無法在服務器端接收數據(Java套接字編程)

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

單個客戶端連接到單個服務器。 我無法顯示從客戶端發送的文本。 我不是從客戶端正確發送文本還是在服務器上沒有正確接收文本? 還有另一種方法可以檢查代碼嗎? (在客戶端已發送數據)或(在服務器端已接收數據)包com.company; 導入java.io. *; 導入java.net.ServerSocket; 導入java.net.Socket; 導入java.util.ArrayList; 導入java.util.Iterator; 導入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();
            }
        }
    }

}

}

這是客戶端代碼

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();
        }
    }
}

}

常見問題。 您正在閱讀線路,但沒有發送線路。 將write()更改為println()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM