java - 服务器未使用套接字编程在Java中发送响应

标签 java sockets client-server

当我从客户端向服务器发送一些数据时,服务器没有给我响应。当我输入所有数据直到“性别”时,光标在那里闪烁。似乎希望用户插入更多数据。它接受的数据与我插入的一样多。我在下面提供了所有代码
我的客户端代码是

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws IOException {
        int age,carPrice,temp,temp1;
        String gender, s_temp;
        Scanner sc = new Scanner(System.in);
        Socket socket = new Socket("127.0.0.1",1342);
        Scanner sc1 = new Scanner(socket.getInputStream());
        PrintStream p = new PrintStream(socket.getOutputStream(), true);
        
        System.out.println("Enter Your Age: ");
        age = sc.nextInt();
        p.println(age);
        
        System.out.println("Enter the Cost of Vehicle: ");
        carPrice = sc.nextInt();
        p.println(carPrice);
        
        System.out.println("Enter Your Gender: ");
        gender = sc.next();
        p.println(gender);
        p.flush();
        
        temp = sc1.nextInt();
        System.out.println(temp);
        
        s_temp = sc1.next();
        System.out.println("The Gender is: " + s_temp);
        
        temp1 = sc1.nextInt();
        System.out.println(temp1);
      
        socket.close();
    }
}
我的服务器端代码:
public class Server {
    public static void main(String args[]) throws IOException, SQLException{
        ServerSocket ssocket = null;
        Socket socket = null;
        System.out.println("Server Listening.......*");
        ssocket=new ServerSocket(1342);
        while(true){
            try{
                socket = ssocket.accept();
                System.out.println("Connection Established.");
                ServerThread st = new ServerThread(socket);
                st.start();
            }
            catch(Exception e){
                System.out.println("Connection Error....");
            }
        }
    } 
}

class ServerThread extends Thread{
    Socket s1 =null;   
    Scanner sc = null;
    PrintStream p=null;
  
    int age,carPrice,temp;
    String gender,temp1;
    
    public ServerThread(Socket s){
        s1=s;
    }
    
    public void run(){
        try{
            sc = new Scanner(s1.getInputStream());
            p = new PrintStream(s1.getOutputStream(),true);
           
            age = sc.nextInt();
            gender = sc.next();
            carPrice = sc.nextInt();
            
            p.println(age*2);
            p.println(carPrice);
            p.println("Your gender is: " +gender);
            
            s1.close();
            System.out.println("Connection Closed....");
        }
        catch(Exception e){
        }
    }  
}
告诉我为什么我的服务器没有发送响应。更正它,以便它可以将响应发送给客户端。

最佳答案

年龄,购车价格和性别输入,不随发送订单一起读取。必须按顺序从客户端读取它。
更改以下代码段。另外,在读取int之后,添加sc.nextLine()以跳过换行符。
服务器

age = sc.nextInt();
carPrice = sc.nextInt();
sc.nextLine();  // skip newline
gender = sc.next();
... 代替
age = sc.nextInt();
gender = sc.next();
carPrice = sc.nextInt();
在客户端,读取顺序与发送顺序不匹配。 sc.next()也会读取一个单词,但是您在发送性别时会发送很多单词。因此,您必须使用sc.nextLine()更改方法
客户
temp = sc1.nextInt();
System.out.println(temp);

temp1 = sc1.nextInt();
System.out.println(temp1);

sc1.nextLine();  // skip newline

s_temp = sc1.nextLine();
System.out.println("The Gender is: " + s_temp);
.. 代替
temp = sc1.nextInt();
System.out.println(temp);
        
s_temp = sc1.next();
System.out.println("The Gender is: " + s_temp);
        
temp1 = sc1.nextInt();
System.out.println(temp1);

关于java - 服务器未使用套接字编程在Java中发送响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65586264/

相关文章:

javascript - 为什么套接字之间的数据传输需要很长时间?

python - 在Python中读取传入的请求字符串

java - 要使用凯撒密码身份验证在 Java 中编写客户端服务器套接字程序,我需要了解什么?

go - 如何在 CoAP 服务器程序 Golang 中添加资源或端点

java - Android ASyncTask 在主线程中使用下载的对象

java - 让 DependsOn 在 RoboBinding 中工作

java - 我怎样才能绕过这个无效的类加载器层次结构?

java - 如何检查 libgdx 中的交集?

sockets - 如何在 Mosquitto 中同时启用 TCP 和 Web 套接字?

c++ - 中断接收套接字