我的java聊天客户端仅在数据流关闭时发送字符串

我的java聊天客户端仅在数据流关闭时发送字符串,java,sockets,stream,Java,Sockets,Stream,我创建了一个java聊天应用程序(客户端和服务器端) 当我在局域网上时,一切正常(使用服务器的局域网IP地址进入我的客户机) 但是,当我在客户机中使用服务器的Internet地址时,只有在关闭客户机的输出数据流时才会发送字符串(并且所有字符串都会同时发送) 下面是我的代码的一个快速快照(在下面的示例中,我将端口从6791向前移动到6790) 我的服务器(线程): 我的客户: InetAddress dnsName; Socket clientSocket; PrintWriter out; dn

我创建了一个java聊天应用程序(客户端和服务器端) 当我在局域网上时,一切正常(使用服务器的局域网IP地址进入我的客户机)

但是,当我在客户机中使用服务器的Internet地址时,只有在关闭客户机的输出数据流时才会发送字符串(并且所有字符串都会同时发送)

下面是我的代码的一个快速快照(在下面的示例中,我将端口从6791向前移动到6790)

我的服务器(线程):

我的客户:

InetAddress dnsName;
Socket clientSocket;
PrintWriter out;
dnsName = InetAddress.getByName("myAddress.me");

clientSocket = new Socket(dnsName.getHostAddress(), 6791);

Thread.sleep(10);


out = new PrintWriter(clientSocket.getOutputStream(), true );
int i=140;

while (i>130){
    try {
        out.println(Integer.toString(i));
        out.flush();
        Thread.sleep(200);
        }
            catch(Exception e) {
                e.printStackTrace();
            }
    i--;
        }
out.flush();
out.close();
clientSocket.close();
我尝试过数据流,没什么可做的。 只有在客户端调用
out.close()
时,我的服务器才会接收字符串

在互联网上,数据流必须关闭才能发送数据,这有什么原因吗?有办法解决这个问题吗?我做错什么了吗

InetAddress dnsName;
Socket clientSocket;
PrintWriter out;
dnsName = InetAddress.getByName("myAddress.me");

clientSocket = new Socket(dnsName.getHostAddress(), 6791);

Thread.sleep(10);


out = new PrintWriter(clientSocket.getOutputStream(), true );
int i=140;

while (i>130){
    try {
        out.println(Integer.toString(i));
        out.flush();
        Thread.sleep(200);
        }
            catch(Exception e) {
                e.printStackTrace();
            }
    i--;
        }
out.flush();
out.close();
clientSocket.close();