Java客户机/服务器读写不需要';不工作,没有错误

Java客户机/服务器读写不需要';不工作,没有错误,java,string,client-server,utf,Java,String,Client Server,Utf,Client.java package Client; import java.io.*; import java.net.*; class Client { /* To send string to server use "out.print(data)" To use info sent from server use "in.readLine()" */ int port = 1234; String hostname =

Client.java

package Client;

import java.io.*;
import java.net.*;

class Client {
        /*
     To send string to server use "out.print(data)"
     To use info sent from server use "in.readLine()"
     */
    int port = 1234;
    String hostname = "localhost";
    String input,output;

    public void send(String text) {
    try {
         Socket skt = new Socket(hostname, port);           /*Connects to server*/

         BufferedReader in = new BufferedReader(new
         InputStreamReader(skt.getInputStream()));          /*Reads from server*/
         System.out.println("Server:" + in.readLine());

         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.print(text);                                   /*Writes to server*/

         skt.close();
         out.close();    /*Closes all*/
         in.close();
      }

      catch(Exception e) {
         System.out.print("Error Connecting to Server\n");
      } 
    }
   public static void main(String args[]) {
     Client c = new Client();
     c.send("Server is online");    //sends message to server
   }
}
Server.java

package Server;

import java.io.*;
import java.net.*;

class Server {
    /*
     To send string to client use "out.print(data)"
     To use info sent from client use "in.readLine()"
     */
        int port = 1234;
    String input,output;

    public void send(String text) {
    try {
         ServerSocket srvr = new ServerSocket(port);
         Socket skt = srvr.accept();                    /*Waiting for Connection from client*/
         System.out.print("Server has connected!\n");

         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.print(text);                                                  /*Write/Send to Client*/

          BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));                   /*Read from Client*/
         System.out.println("Client:" + in.readLine());

         out.close();
         in.close();
         skt.close();               /*Closes all*/
         srvr.close();
      } catch( Exception e) {
         System.out.print("Error Connecting\n");
      } 
    }

   public static void main(String args[]) {
       Server s = new Server();
       s.send("Client is online");  //sends a message to client

   }
}
为什么什么都不做
服务器已连接
当我从服务器和客户端发送时发生

s.send("X is online");
哪一个应该在另一面阅读并在cmd中打印出来


(这是因为printwriter之后激活了bufferreader,但没有将其拾取?如果是,我如何解决此问题?

一种可能性-请查看此处的顺序:

 PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
 out.print(text);

 skt.close();
 out.close(); 
在关闭写入程序之前先关闭插槽。这意味着,如果写入程序有任何缓冲数据,它就没有机会写入它。试着按照你关东西的顺序来切换——最后关上插座

(请注意,通常情况下,您会将它们放在
finally
块中……)


编辑:然后我注意到你没有在服务器端打印一行。您应该同时进行这两项更改。

一种可能性-查看此处的订购:

 PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
 out.print(text);

 skt.close();
 out.close(); 
在关闭写入程序之前先关闭插槽。这意味着,如果写入程序有任何缓冲数据,它就没有机会写入它。试着按照你关东西的顺序来切换——最后关上插座

(请注意,通常情况下,您会将它们放在
finally
块中……)

编辑:然后我注意到你没有在服务器端打印一行。您应该同时进行这两项更改。

除非您发送换行符,否则您的
BufferedReader#readLine
调用将无限期阻塞。替换

out.print(text); 

要匹配来自客户端和服务器的
BufferedReader#readLine
调用。

除非发送换行符,否则您的
BufferedReader#readLine
调用将无限期阻塞。替换

out.print(text); 
package client;

import java.io.*;
import java.net.*;

class Client {
        /*
     To send string to server use "out.print(data)"
     To use info sent from server use "in.readLine()"
     */
    int port = 1234;
    String hostname = "localhost";
    String input,output;

    public void send(String text) {
    try {
         Socket skt = new Socket(hostname, port);           /*Connects to server*/

         BufferedReader in = new BufferedReader(new
         InputStreamReader(skt.getInputStream()));          /*Reads from server*/
         System.out.println("Server:" + in.readLine());

         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.println(text);                                   /*Writes to server*/
         out.close();    /*Closes all*/
         in.close();
         skt.close();

      }

      catch(Exception e) {
         System.out.print("Error Connecting to Server\n");
      } 
    }
   public static void main(String args[]) {
     Client c = new Client();
     c.send("Server is online");    //sends message to server
   }
}
package server;

import java.io.*;
import java.net.*;

class Server {
    /*
     To send string to client use "out.print(data)"
     To use info sent from client use "in.readLine()"
     */
        int port = 1234;
    String input,output;

    public void send(String text) {
    try {

        ServerSocket srvr = new ServerSocket(port);
         Socket skt = srvr.accept();                    /*Waiting for Connection from client*/
         System.out.println("Server has connected!\n");

         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.println(text);                                                  /*Write/Send to Client*/

          BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));                   /*Read from Client*/
         System.out.println("Client:" + in.readLine());

       out.close();
         in.close();
         skt.close();              /*Closes all*/
        srvr.close();
      } catch( Exception e) {
         System.out.print("Error Connecting\n");
      } 
    }

   public static void main(String args[]) {
       Server s = new Server();
       s.send("Client is online");  //sends a message to client

   }
}

匹配来自客户端和服务器的
BufferedReader#readLine
调用

package client;

import java.io.*;
import java.net.*;

class Client {
        /*
     To send string to server use "out.print(data)"
     To use info sent from server use "in.readLine()"
     */
    int port = 1234;
    String hostname = "localhost";
    String input,output;

    public void send(String text) {
    try {
         Socket skt = new Socket(hostname, port);           /*Connects to server*/

         BufferedReader in = new BufferedReader(new
         InputStreamReader(skt.getInputStream()));          /*Reads from server*/
         System.out.println("Server:" + in.readLine());

         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.println(text);                                   /*Writes to server*/
         out.close();    /*Closes all*/
         in.close();
         skt.close();

      }

      catch(Exception e) {
         System.out.print("Error Connecting to Server\n");
      } 
    }
   public static void main(String args[]) {
     Client c = new Client();
     c.send("Server is online");    //sends message to server
   }
}
package server;

import java.io.*;
import java.net.*;

class Server {
    /*
     To send string to client use "out.print(data)"
     To use info sent from client use "in.readLine()"
     */
        int port = 1234;
    String input,output;

    public void send(String text) {
    try {

        ServerSocket srvr = new ServerSocket(port);
         Socket skt = srvr.accept();                    /*Waiting for Connection from client*/
         System.out.println("Server has connected!\n");

         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.println(text);                                                  /*Write/Send to Client*/

          BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));                   /*Read from Client*/
         System.out.println("Client:" + in.readLine());

       out.close();
         in.close();
         skt.close();              /*Closes all*/
        srvr.close();
      } catch( Exception e) {
         System.out.print("Error Connecting\n");
      } 
    }

   public static void main(String args[]) {
       Server s = new Server();
       s.send("Client is online");  //sends a message to client

   }
}
以上代码对我有效 看看你有没有遗漏什么

以上代码对我有效
看看你是否遗漏了什么

我试着在两个类上切换它们,所以skt是最后一个,writer是第一个,这没有什么区别,而且当我把它们放在finally块中时,它们找不到符号“out.,in.,srvr.”等。@String.userName:你不能在没有其他工作的情况下把它们放在finally块中。。。但是,即使抛出异常,也应该确保关闭所有内容。很公平,我以前从未使用过finally块,也不知道我尝试在两个类上切换它们,因此skt是最后一个,writer是第一个,这没有什么区别,而且当我将它们放在finally块中时,它们找不到符号“out.,in.,srvr”etc.@String.userName:你不能在没有其他工作的情况下把它们放在finally块中。。。但是,即使抛出异常,也应该确保关闭所有程序。很公平,我以前从未使用过finally块,也不知道该如何解决您的问题,不是吗?奇怪,在这里进行了测试,效果很好。尝试清理您的项目并重新运行。这应该已经解决了您的问题,没有?奇怪,在这里测试并运行良好。尝试清理您的项目并重新运行。我将您的客户端版本与我的进行了交换,没有任何更改,但当我将您的服务器与我的服务器进行交换时,它工作正常!然而,它们之间的唯一区别是“try{”下的换行和“ServerSocket skt…”之前的空格。我不知道问题是什么:OI将您的客户端版本与我的进行了交换,没有任何更改,但当我将您的服务器与我的服务器进行交换时,它仍然有效!然而,它们之间的唯一区别是“try{”下的换行和之前的空格“ServerSocket skt…”我不知道问题是什么:O