繁体   English   中英

Java Socket和ServerSocket无法通信

[英]Java Socket and ServerSocket not communicating

自我说明,服务器处理客户端并识别连接,但它们仍无法通信。 这是代码:

服务器类别:

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

public class Server{
    private final int PORT=8080;
    public BufferedReader fromClient;
    public PrintWriter toClient;
    public ServerSocket server;
    public Socket clientSocketHandler;
    public Server(){ //constructor

        if(startServer())
            System.out.println("Server Avviato...");
        else
            System.out.println("Errore nell'avvio del server...");
    }

    private boolean startServer(){
        try{
            server = new ServerSocket(PORT);
        }catch(IOException e){
            e.printStackTrace();
            return false;
        }
        return true;
    }

    public void runServer(){
        try{
            System.out.println("Server in ascolto sulla porta " + PORT + " ...");
            clientSocketHandler = server.accept();
            System.out.println("Client Connesso...");

            InputStreamReader isr = new InputStreamReader(clientSocketHandler.getInputStream());
            fromClient = new BufferedReader(isr);

            OutputStreamWriter osr = new OutputStreamWriter(clientSocketHandler.getOutputStream());
            BufferedWriter bw = new BufferedWriter(osr);
            toClient = new PrintWriter(bw);


        }catch(IOException e){
            e.printStackTrace();
        }
    }

}

MainServer类:

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

public class MainServer{

    public static void main(String args[]){
        Server s1 = new Server();
        s1.runServer();

        float n1,n2;
        String op;

        try{
            s1.toClient.println("comunicazione da server");
            System.out.println("Aspettando i numeri...");
            n1=Float.parseFloat(s1.fromClient.readLine());
            n2=Float.parseFloat(s1.fromClient.readLine());
            System.out.println("Numeri accettati");

            System.out.println("Aspettando operatore...");
            op=s1.fromClient.readLine();
            System.out.println("Operatore accettato");
        }catch(IOException e){
            e.printStackTrace();
        }
    }



}

客户类别:

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

public class Client{
    private final int PORT=8080;
    private InetAddress address = InetAddress.getLoopbackAddress();
    public PrintWriter toServer;
    public BufferedReader fromServer;
    public BufferedWriter bw;
    public Socket client;

    public Client(){
        if(startClient())
            System.out.println("Connesso al Server...");
        else
            System.out.println("Errore nella connessione...");
    }

    private boolean startClient(){
        try{
            client = new Socket(address, PORT); 

            OutputStreamWriter osw = new OutputStreamWriter(client.getOutputStream());
            bw = new BufferedWriter(osw);
            toServer = new PrintWriter(bw);

            InputStreamReader isr = new InputStreamReader(client.getInputStream());
            fromServer = new BufferedReader(isr);
        }catch(IOException e){
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

MainClient类别:

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class MainClient{
    public static void main(String args[]){

        Client c = new Client();

        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader kBoard = new BufferedReader(isr);

        String n1,n2,op;

        try{
            System.out.println(c.fromServer.readLine());
            System.out.println("Inserisci il primo numero");
            n1=kBoard.readLine();

            System.out.println("Inserisci il Secondo numero");
            n2=kBoard.readLine();

            System.out.println("Passando i valori al server");
            c.toServer.println(n1);
            c.toServer.println(n2);

            System.out.println("Inserisci l'operatore [+,-,/,*]");
            op = kBoard.readLine();

            System.out.println("Passando i valori al server");
            c.toServer.println(op);
        }catch(IOException e){
            e.printStackTrace();
        }



    }
}

对不起,意大利弦乐。 它的客户端卡在“ Connesso al Server ...”上,而服务器卡在“ Aspettando i numeri”上

帮我!! :)

  • 您应该在服务器套接字方法runServer中进行无限循环( while(true) {...} ),以便接受客户端套接字。 没有它就不会听!
  • 为了处理多个客户端,还应该使其成为多线程的。 即,每次接受新客户端时,都会启动一个新线程来处理请求。

应该可以帮到你。 祝你今天愉快...

暂无
暂无

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

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