繁体   English   中英

消息未从客户端发送到服务器-Java

[英]Message not sending to Server from Client - Java

我有一个Server-Client程序,我在其中使用JLabel将小消息发送给客户端。 从服务器收到该消息后,该特定客户端必须立即发送响应。 但是它没有发送任何消息。 有人可以看看我的代码并告诉我我的错误在哪里吗?

//服务器

void connect_clients()
    {
        try {
            ServerSocket listener = new ServerSocket(7700);
            jButton1.setText("Server Running!");
            jButton1.setEnabled(false);
                while (true) {

                    socket = listener.accept();
                    socketList.add(socket);
                    //socketList.add(listener.accept());
                     BufferedReader ed = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String tmp = ed.readLine();
             System.out.print("I Recieved :"+tmp);

                }

            }
        catch(IOException ex)
        {
            JOptionPane.showMessageDialog(null,ex);
        }
    }

//客户

 void connect_server() throws IOException
    {
        try {
            // TODO code application logic here
            String serverAddress = JOptionPane.showInputDialog(
                    "Enter IP Address of a machine that is\n" +
                            "running the date service on port 9090:");
            s = new Socket(serverAddress, 7700);

            while(true){
            BufferedReader input =
            new BufferedReader(new InputStreamReader(s.getInputStream()));
            String answer = input.readLine();
            System.out.println(answer);
                if(answer != null)
                {
                    PrintStream pr = new PrintStream(s.getOutputStream());
                    InputStreamReader rd = new InputStreamReader(System.in);
                    BufferedReader ed = new BufferedReader(rd);
                    String temp = ed.readLine();
                    pr.println(temp);

                    JOptionPane.showMessageDialog(null,"Answer is not null");  //THIS WORKS
               }

            }

          }
       catch (ConnectException e) {

            JOptionPane.showMessageDialog(null, e);
        }
         catch (SocketException e) {

            JOptionPane.showMessageDialog(null, e);
        }
    }

您在实现中遗漏的一些要点:

  • 流和套接字永远不会关闭
  • 在客户端中,我看不到无尽循环的意义
  • 客户端应通过通过输出流发送消息来初始化通信(不要先尝试阅读)

对于一个简单的示例,步骤应为:

  1. 开始服务器侦听,一旦建立连接以阅读消息(您已这样做)
  2. 客户端应该通过输出流发送一条消息并关闭流和套接字
  3. 服务器应关闭流和用于建立连接的sockect

例:

//Server
socket = listener.accept();
BufferedReader ed = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter pr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream());
String tmp = ed.readLine();
System.out.print("I Recieved :"+tmp);
String msg = "Message received";
pr.write(msg,0,msg.length());
pr.newLine();
ed.close();
pr.close();
socket.close();

//Client
BufferedWriter pr = new BufferedWriter(new OutputStreamWriter(s.getOutputStream());
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
String sendMessage = "Send Message";
pr.write(msg,0,msg.length());
pr.newLine();
String answer = input.readLine();
System.out.println(answer);
JOptionPane.showMessageDialog(null,"Answer is not null"); 
input.close();
pr.close();
s.close();

UPDATE

从输入流中连续读取:

BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line;
while((line=input.readLine())!=null){ 
  //do something with line
}

我将建议一种简单的方法,其中服务器将hi msg发送到客户端。

对于服务器:

//Server
ServerSocket ss=new ServerSocket(3554);
socket = ss.accept();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getOutputStream()));
String msg ="Hi from server"
bw.write(msg);
String msgFromClient=br.readLine();
System.out.println(msgFromClient);
bw.close();
socket.close();

对于客户:

//Client
Socket socket=new Socket("localhost",3554)
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
String received = input.readLine();
System.out.println(received);
bw.write("Client recieve :"+received);
br.close();
bw.close();
socket.close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM