繁体   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