javatcp-服务器&;客户正在工作,但可以';我得不到答案

javatcp-服务器&;客户正在工作,但可以';我得不到答案,java,tcp,Java,Tcp,我正在尝试制作一个小型TCP服务器/客户端。我有一个客户机和一个服务器,在解决了一些基本的异常之后,什么都不起作用。 客户端应该将(用户)数据发送到服务器(在端口6789,localhost),然后服务器应该用大写字母写数据并将其返回。除了发回大写字母外,一切似乎都正常。代码如下: TCPServer: import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader;

我正在尝试制作一个小型TCP服务器/客户端。我有一个客户机和一个服务器,在解决了一些基本的异常之后,什么都不起作用。 客户端应该将(用户)数据发送到服务器(在端口6789,localhost),然后服务器应该用大写字母写数据并将其返回。除了发回大写字母外,一切似乎都正常。代码如下:

TCPServer:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {

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

        System.out.println("SERVER");

        String clientSentence;
        String capitalizedSentence;
        ServerSocket server = new ServerSocket(6789);


        TCPClient.main(null);


        while (true) {
            Socket connection = server.accept();
            System.out.println("<S> Connection!");
            BufferedReader fromClient = new BufferedReader(
                new InputStreamReader(connection.getInputStream()) );
            DataOutputStream toClient = new DataOutputStream(connection.getOutputStream());

            clientSentence = fromClient.readLine();
            System.out.println("<S> Recieved: " + clientSentence);

            capitalizedSentence = clientSentence.toUpperCase() + '\n';
            System.out.print("About to send: " + capitalizedSentence);
            toClient.writeBytes(capitalizedSentence);
        }
    }

}
导入java.io.BufferedReader;
导入java.io.DataOutputStream;
导入java.io.InputStreamReader;
导入java.net.ServerSocket;
导入java.net.Socket;
公共类TCPServer{
公共静态void main(字符串[]args)引发异常{
System.out.println(“服务器”);
字符串介词句;
字符串大写的插入;
ServerSocket服务器=新的ServerSocket(6789);
TCPClient.main(空);
while(true){
套接字连接=server.accept();
System.out.println(“连接!”);
BufferedReader fromClient=新的BufferedReader(
新的InputStreamReader(connection.getInputStream());
DataOutputStream-toClient=新的DataOutputStream(connection.getOutputStream());
client句子=fromClient.readLine();
System.out.println(“接收:+client句子”);
CapitalizedEntence=ClientSession.toUpperCase()+'\n';
System.out.print(“即将发送:+capitalizedSentence”);
toClient.writeBytes(大写);
}
}
}
TCP客户:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class TCPClient {

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

        System.out.println("CLIENT");

        String sentence;
        String modSentence;
        BufferedReader inUser = new BufferedReader(new InputStreamReader(System.in));

        Socket clientToServer = new Socket("localhost", 6789);
        DataOutputStream outServer = new DataOutputStream(clientToServer.getOutputStream());
        BufferedReader inServer = new BufferedReader(
            new InputStreamReader(clientToServer.getInputStream()) );

        System.out.println("<C> Type now: ");
        sentence = inUser.readLine();
        System.out.println("<C> Got it!");

        System.out.println("<C> Sending " + sentence + " to server...");
        outServer.writeBytes(sentence + '\n');
        outServer.flush();

        System.out.println("<C> Server respodse:");
        modSentence = inServer.readLine();

        System.out.println("<C> From server: " + modSentence);
        clientToServer.close();
    }
}
导入java.io.BufferedReader;
导入java.io.DataOutputStream;
导入java.io.InputStreamReader;
导入java.net.Socket;
公共类TCPClient{
公共静态void main(字符串[]args)引发异常{
System.out.println(“客户”);
串句;
串句;
BufferedReader inUser=新的BufferedReader(新的InputStreamReader(System.in));
Socket clientToServer=新套接字(“localhost”,6789);
DataOutputStream outServer=新的DataOutputStream(clientToServer.getOutputStream());
BufferedReader inServer=新的BufferedReader(
新的InputStreamReader(clientToServer.getInputStream());
System.out.println(“立即键入:”;
语句=inUser.readLine();
System.out.println(“明白了!”);
System.out.println(“发送”+句子+“到服务器…”);
outServer.writeBytes(句子+'\n');
outServer.flush();
System.out.println(“服务器响应:”);
ModSession=inServer.readLine();
System.out.println(“来自服务器:”+ModSession);
clientToServer.close();
}
}
控制台:

SERVER
CLIENT
<C> Type now: 
efd
<C> Got it!
<C> Sending efd to server...
<C> Server respodse:
asd
服务器
客户
现在键入:
efd
知道了!
正在将efd发送到服务器。。。
服务器响应:
自闭症
而且


没有任何内容

您正在客户端进行刷新,但不是在服务器端

只需添加一个

toClient.flush()
在服务器端也打电话

答案是: 我很笨

我不小心让客户端和服务器在同一个线程上运行。我现在使
TCPClient
a
Runnable
一切都按计划进行

注:
TCPClient.main(null)
不会启动新的程序/线程,只是同一个线程,另一个静态函数。

您忘了刷新服务器的响应我想我(终于)找到了!这可能与我在同一个线程上运行客户机和服务器有关,对吗?这样,循环就永远不会被访问。这些是独立的程序,它们在独立的进程上运行。顺便说一句:很好的编码风格。尤其是变量的命名非常好。我把东西推到了更多的方法中,但是对于一个新手来说,代码真的很好!