Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端无法向服务器Java套接字发送消息_Java_Sockets - Fatal编程技术网

客户端无法向服务器Java套接字发送消息

客户端无法向服务器Java套接字发送消息,java,sockets,Java,Sockets,我正在尝试使用客户端和服务器处理一个简单的项目,其中客户端发送一个字符串,服务器将反向发送回客户端。然而,他们在发送和接收信息时都被挂断了。所以我要告诉你我在程序中的位置,它在哪里停止…这是我的客户端和服务器的控制台输出 客户 Connecting to server... S: Connected to server at 4446 You sent Oranges, sending message... 服务器 Waiting for a connection... Connection

我正在尝试使用客户端和服务器处理一个简单的项目,其中客户端发送一个字符串,服务器将反向发送回客户端。然而,他们在发送和接收信息时都被挂断了。所以我要告诉你我在程序中的位置,它在哪里停止…这是我的客户端和服务器的控制台输出

客户

Connecting to server...
S: Connected to server at 4446
You sent Oranges, sending message...
服务器

Waiting for a connection...
Connection received from /127.0.0.1 on port 4446
Waiting for response...
我读过一些关于如何使用确切的消息输出和输入的文章。因此,就像客户机发送带有新行的输入一样,服务器应该期望在中读取该行。虽然我在代码中没有看到这一点,但我的直觉是这就是问题所在

我的代码如下

Client.java

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client
{
    PrintWriter out;
    Scanner conIn;

    public static void main(String[] args) throws UnknownHostException, IOException
    {
        Client c = new Client();
        c.run();
    }

    public void run() throws UnknownHostException, IOException
    {
        System.out.println("Connecting to server...");
        Socket connection = new Socket("localhost", 4446); //Connects to server
        out = new PrintWriter(connection.getOutputStream());
        conIn = new Scanner(connection.getInputStream());
        String msg = conIn.nextLine();
        System.out.println(msg);
        String s = "Oranges";
        System.out.println("You sent " + s + ", sending message...");
        out.println(s); //STOPS HERE
        msg = conIn.nextLine();
        System.out.println(msg);
        out.flush();
    }
}
Server.java

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server implements Runnable
{
    ServerSocket serverSocket;
    Scanner in;
    PrintWriter out;
    Socket connection = null;

    public static void main(String[] args)
    {
        Server s = new Server();
        s.run();
    }

    public void run()
    {
        try
        {
            serverSocket = new ServerSocket(4446); //Create server
            System.out.println("Waiting for a connection...");
            this.connection = serverSocket.accept(); //Accept connection
            System.out.println("Connection recieved from " + connection.getInetAddress() + " on port " + connection.getLocalPort());
            out = new PrintWriter(connection.getOutputStream()); //Gets output to connection
            out.flush();
            in = new Scanner(connection.getInputStream()); //Gets input to connection
            out.println("S: Connected to server at " + serverSocket.getLocalPort());
            out.flush();
            System.out.println("Waiting for response...");
            String msg = in.nextLine(); //STOPS HERE
            System.out.println("Message recieved! Reversing now.");
            String rMsg = reverse(msg);
            System.out.println("Returning message...");
            out.println("S: Your message was: " + msg + " and it is now " + rMsg);
            out.flush();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    public String reverse(String s)
    {
        String revS = "";

        for(int i = s.length() - 1; i >= 0; i--)
        {
            revS = revS + s.charAt(i);
        }
        return revS;
    }

}

Put
out.flush()out.println之后的code>

如果您执行
out.flush()紧跟在
out.println之后?啊,这似乎奏效了,谢谢!我想他们会希望每次都堆叠起来,或者在你发送一堆输出后再做。但我想这并没有多大意义,哈哈。谢谢,当你在等待数据的交叉传输时,你不能“叠加”。最好使用线程来同时允许输出和输入。哦,好的,是的,这是设置线程的下一步,以便服务器可以处理多个客户端。@Carson您可以回答自己的问题并将其标记为已接受,这将向人们显示您不再需要有关问题的帮助。