简体   繁体   English

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

[英]Server is not sending the response in java using socket programming

When I'm sending some data to server from client, server is not giving me the response.当我从客户端向服务器发送一些数据时,服务器没有给我响应。 When I enter all the data till Gender, the cursor blinks there.当我输入所有数据直到性别时,cursor 在那里闪烁。 It seems it wants the user to insert more data.似乎它希望用户插入更多数据。 It is accepting data as much as I'm inserting.它接受的数据与我插入的数据一样多。 I have provided all my code below我在下面提供了我的所有代码

My client side code is我的客户端代码是

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();
    }
}

My server side code:我的服务器端代码:

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){
        }
    }  
}

Tell me why my server is not sending a response.告诉我为什么我的服务器没有发送响应。 Correct it so that it can send respond to the client.更正它,以便它可以向客户端发送响应。

Age, car price and gender inputs, not read with send order.年龄、汽车价格和性别输入,不与发送订单一起阅读。 It must be read from the client in order.必须按顺序从客户端读取。

Change below snippet.更改以下代码段。 Also, add sc.nextLine() to skip newline after int read.此外,添加sc.nextLine()以在 int 读取后跳过换行符。

Server服务器

age = sc.nextInt();
carPrice = sc.nextInt();
sc.nextLine();  // skip newline
gender = sc.next();

... instead of ... 代替

age = sc.nextInt();
gender = sc.next();
carPrice = sc.nextInt();

On the client-side, read order is not matched with send order.在客户端,读取顺序与发送顺序不匹配。 Also sc.next() reads one word, but you send many words while sending gender. sc.next()也读取一个单词,但是您在发送性别时发送了很多单词。 So you have to change method with sc.nextLine()所以你必须用sc.nextLine()改变方法

Client客户

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);

.. instead of .. 代替

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);

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

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