当前位置: 首页 > 知识库问答 >
问题:

为什么我的else if代码不在服务器端运行?我想让输入打印给定的次数循环在客户端运行

鲁华茂
2023-03-14
import java.io.*;  
import java.net.*;  

public class MyServer {  
    public static void main(String[] args){  
        try{  
            ServerSocket ss=new ServerSocket(5001);  
            Socket s=ss.accept();//establishes connection   
            DataInputStream dis=new DataInputStream(s.getInputStream());  
            String  str=(String)dis.readUTF();  
            System.out.println("message= "+str);  

            DataOutputStream dout=new DataOutputStream(s.getOutputStream());  
            if ("Hi".equals(str)){
                dout.writeUTF("How are you?");
            } else if ("Bye".equals(str)){
                dout.writeUTF("Thankyou! Have a Good day!"); 
            } **else if (str != null)){
                try {
                    String numbers;
                    numbers = str.replaceAll("[^0-9]", ""); 
                    int number = Integer.parseInt(numbers);
                     dout.writeUTF("The line is being printed"); 
                    for (int i = 0; i < number; i++) {
                            dout.writeUTF(str.replaceAll("[^a-z,^A-Z]", ""));
                    }
                } catch (Exception e) {
                    //TODO: handle exception
                }**
                
                 
            } else {
                dout.writeUTF("Sorry!");
            }       
            dout.flush();  
            dout.close();  
            s.close();  
            ss.close();  
        } catch(Exception e) {
            System.out.println(e);
        } 
    }  
}  
import java.io.*;  
import java.net.*;  
import java.util.*;  

public class MyClient {  
    public static void main(String[] args) {  
        try{
            Scanner sc = new Scanner(System.in);  
            Socket s=new Socket("localhost",5001);  
            DataOutputStream dout=new DataOutputStream(s.getOutputStream());
            String str1= sc.nextLine();           
            dout.writeUTF(str1);  
            dout.flush(); 
            
            DataInputStream dis=new DataInputStream(s.getInputStream());  
            String  str=(String)dis.readUTF(); 
            System.out.println("message= "+str);

            dout.close();  
            dis.close();
            s.close();  
        } catch(Exception e) {
            System.out.println(e);} 
    }  
} 

我从客户端向服务器提供输入,并希望该输入在客户端打印多次。但做不到。谁能让我知道我在这里犯了什么错误?它正在回复消息“嗨”和“再见”,其他一切都很好。

共有1个答案

席银龙
2023-03-14

以下是您的代码和我的更正。
(代码后面的注释。)

MyServer

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServer {
    public static void main(String[] args) {
        try (ServerSocket ss = new ServerSocket(5001)) {
            Socket s = ss.accept();// establishes connection
            InputStream is = s.getInputStream();
            int count = is.available();
            while (count <= 0) {
                try {
                    Thread.sleep(1000L);
                    System.out.println("'MyServer' is sleeping (for one second)...");
                }
                catch (InterruptedException xInterrupted) {
                    // Ignore.
                }
                count = is.available();
            }
            DataInputStream dis = new DataInputStream(is);
            String str = dis.readUTF();
            System.out.println("message= " + str);
            DataOutputStream dout = new DataOutputStream(s.getOutputStream());
            if ("Hi".equals(str.trim())) {
                dout.writeUTF("How are you?");
            }
            else if ("Bye".equals(str)) {
                dout.writeUTF("Thankyou! Have a Good day!");
            }
            else if (str != null) {
                try {
                    String numbers;
                    numbers = str.replaceAll("[^0-9]", "");
                    int number = Integer.parseInt(numbers);
                    dout.writeUTF("The line is being printed");
                    for (int i = 0; i < number; i++) {
                        dout.writeUTF(str.replaceAll("[^a-z,^A-Z]", ""));
                    }
                    dout.flush();
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
            dout.flush();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        try {
            Thread.sleep(2000L);
        }
        catch (InterruptedException xInterrupted) {
            // Ignore.
        }
    }
}

MyClient

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;

public class MyClient {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.nextLine();
        try (Socket s = new Socket("localhost", 5001);
             DataOutputStream dout = new DataOutputStream(s.getOutputStream());
             DataInputStream dis = new DataInputStream(s.getInputStream())) {
            dout.writeUTF(str1);
            dout.flush();
            try {
                Thread.sleep(500L);
            }
            catch (InterruptedException xInterrupted) {
                // Ignore.
            }
            String str = dis.readUTF();
            System.out.println("message= " + str);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 类似资料:
  • 使用依赖关系spring-cloud-starter-zipkin,应用程序应该在sleuth触发时连接到zipkin服务器。我没有启动zipkin服务器,所以它应该抛出一个连接异常。但什么也没发生。而当我启动zipkin服务器时,它不能接收任何东西。 应用程序.属性 和日志

  • 我制作了一个FTP客户端(被动),它无法连接到服务器。我使用的FTP服务器是Filezilla;我只是用它来测试。每次我运行java程序(FTP客户端)时,Filezilla都会断开连接,并在Eclipse中出现以下错误: 这是FTP客户端: 这是我连接的程序: 还尝试编写我的lan ip而不是

  • 我目前有一个在非阻塞模式下使用 NIO java 库编写的桌面服务器。您可以在此处找到完整的服务器项目。我还创建了一个用于测试目的的非阻塞 NIO 客户端。你可以在这里找到这个项目。最后,服务器应该用于Android即时通讯应用程序。我使客户端和服务器都基于发送“数据包”进行通信的想法。我的意思是,Packet 类的引用被打包到字节缓冲区中并通过套接字通道发送。然后,它们在另一端反序列化并执行。

  • 问题内容: 我想做的是请用户输入一些字符串以读入数组,然后要求用户输入该数量的字符串并将其读入数组。当我运行此代码时,它从不要求我在第一个for循环的第一个循环中输入内容,只打印出“字符串#0:字符串#1:”,然后我就可以输入文本了。为什么会这样,我做错了什么? 问题答案: 缓冲。 输入输入数量时,不会在输入缓冲区中占用换行符的位置。在for循环的迭代0中,缓冲区中已经有一行输入,并且可以立即完成

  • 问题内容: 我想在两个或更多不同的node.js应用程序服务器之间启用基于套接字的p2p通信。我正在使用socket.io处理给定服务器与其服务的Web应用程序之间的所有此类通信- 但我正在寻找的是一种服务器与服务器之间进行通信的方法。 我最初以为它像这样简单: 但是,事实证明,服务器端socket.io实现没有提供“连接”方法,仅提供了侦听方法。 为什么是这样?为什么不能将节点应用程序服务器视为

  • null 对于SocketRocket,我用代码1000关闭服务器端的websocket,客户机经常读取1001。 对于Tyrus,我用代码1011关闭websocket,客户机读取1006或1011。 RFC 6455中的关闭代码说明: close代码作为将信息从服务器传递到客户机的一种手段是不可靠的吗?在关闭WebSockets之前,我需要在应用程序层实现传递此信息的东西吗?