[英]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.