Läuft ein Client-Server-Programm in Java geschrieben auf NetBeans
Ich versuche, führen Sie eine client-server-Programm in java unter Netbeans.
Hier ist der code für den server:
//File Name GreetingServer.java
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread
{
private ServerSocket serverSocket;
public GreetingServer(int port) throws IOException
{
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(10000);
}
public void run()
{
while(true)
{
try
{
System.out.println("Waiting for client on port " +
serverSocket.getLocalPort() + "...");
Socket server = serverSocket.accept();
System.out.println("Just connected to "
+ server.getRemoteSocketAddress());
DataInputStream in =
new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
DataOutputStream out =
new DataOutputStream(server.getOutputStream());
out.writeUTF("Thank you for connecting to "
+ server.getLocalSocketAddress() + "\nGoodbye!");
server.close();
}catch(SocketTimeoutException s)
{
System.out.println("Socket timed out!");
break;
}catch(IOException e)
{
e.printStackTrace();
break;
}
}
}
public static void main(String [] args)
{
int port = Integer.parseInt(args[0]); #line 48, error arises here.
try
{
Thread t = new GreetingServer(port);
t.start();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
Hier ist der code für den client:
//File Name GreetingClient.java
import java.io.*;
import java.net.*;
public class GreetingClient
{
public static void main(String [] args)
{
String serverName = args[0]; #line 10, error arises here
int port = Integer.parseInt(args[1]);
try
{
System.out.println("Connecting to " + serverName
+ " on port " + port);
Socket client = new Socket(serverName, port);
System.out.println("Just connected to "
+ client.getRemoteSocketAddress());
OutputStream outToServer = client.getOutputStream();
DataOutputStream out =
new DataOutputStream(outToServer);
out.writeUTF("Hello from "
+ client.getLocalSocketAddress());
InputStream inFromServer = client.getInputStream();
DataInputStream in =
new DataInputStream(inFromServer);
System.out.println("Server says " + in.readUTF());
client.close();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
So, wenn ich will, um zu simulieren, der client und der server laufen zusammen, ich habe zuerst auf dem server ausgeführt werden.
Sobald der server läuft, brauche ich auf dem client ausgeführt werden.
Jedoch, wenn ich versuche den server zu starten-Datei, bekomme ich folgende Fehlermeldung:
ausführen:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
bei GreetingServer.main(GreetingServer.java:48)
Java Result: 1
ERSTELLEN ERFOLGREICH (Gesamtzeit: 0 Sekunden)
Ähnlich, wenn ich versuche, führen Sie das client-Programm, bekomme ich die folgende Fehlermeldung:
ausführen:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
bei GreetingClient.main(GreetingClient.java:10)
Java Result: 1
ERSTELLEN ERFOLGREICH (Gesamtzeit: 0 Sekunden)
Warum ist das passiert? Bitte helfen Sie.
UPDATE:
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread
{
private static int port;
private ServerSocket serverSocket;
public GreetingServer(int port) throws IOException
{
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(10000);
}
public void run()
{
while(true)
{
try
{
System.out.println("Waiting for client on port " +
serverSocket.getLocalPort() + "...");
Socket server = serverSocket.accept();
System.out.println("Just connected to "
+ server.getRemoteSocketAddress());
DataInputStream in =
new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
DataOutputStream out =
new DataOutputStream(server.getOutputStream());
out.writeUTF("Thank you for connecting to "
+ server.getLocalSocketAddress() + "\nGoodbye!");
server.close();
}catch(SocketTimeoutException s)
{
System.out.println("Socket timed out!");
break;
}catch(IOException e)
{
e.printStackTrace();
break;
}
}
}
public static void main(String [] args)
{
port=9000;
try
{
Thread t = new GreetingServer(port);
t.start();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
//File Name GreetingClient.java
import java.io.*;
import java.net.*;
public class GreetingClient
{
private static String serverName;
public static void main(String [] args)
{
String sName = "MyServerName";
int port = 9000;
try
{
System.out.println("Connecting to " + sName
+ " on port " + port);
Socket client = new Socket(sName, port);
System.out.println("Just connected to "
+ client.getRemoteSocketAddress());
OutputStream outToServer = client.getOutputStream();
DataOutputStream out =
new DataOutputStream(outToServer);
out.writeUTF("Hello from "
+ client.getLocalSocketAddress());
InputStream inFromServer = client.getInputStream();
DataInputStream in =
new DataInputStream(inFromServer);
System.out.println("Server says " + in.readUTF());
client.close();
}catch(IOException e)
{
}
}
}
Ist es kein Fehler auf der server-Seite jetzt. Aber ich bin noch immer der folgende Fehler auf der client-Seite:
ausführen:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
bei GreetingClient.main(GreetingClient.java:10)
Java Result: 1
ERSTELLEN ERFOLGREICH (Gesamtzeit: 0 Sekunden)
Wie betreibst du den server?
Nein, ich bin nicht. wenn ich soll, dann wo und wie gebe ich Sie?
durch einen rechts-Klick auf die .java-Datei und wählen Ausführen
bitte haben Sie einen Blick auf das update
InformationsquelleAutor Anon | 2013-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code setzt Voraus, dass der port, den Sie verwenden möchten als argument so :
Entweder führen Sie Ihre Anwendung mit der Zeile Patryk Roszczyniała gepostet
Wenn Sie nicht es verwenden möchten, löschen Sie einfach die Zeilen :
und ersetzen Sie Sie durch hartcodierte Werte wie :
Update :
Ich habe gerade deinen code getestet, in der Tat, der serverName ist die Adresse, die Sie verwenden, um eine Verbindung zum server herstellen, so ersetzen Sie es durch
"localhost"
wenn Sie ausgeführt werden client und server auf der gleichen Maschine.Getesteten code :
Hier ist der aktualisierte code habe ich getestet und es sollte perfekt funktionieren, wenn Sie laufen beide auf der gleichen Maschine.
Client :
Server :
Ich kompilierte und lief Ihr code habe ich nicht bekommen, eine Ausnahme, aber Sie haben zu setzen Sie den serverName auf "localhost", um es zu schließen. Überprüfen Sie meine zu Bearbeiten
Ich stellte Sie die aktualisierte code, die ich getestet habe, es zu überprüfen, es läuft perfekt auf meinem computer einfach durch ausführen sowohl in Eclipse.
ich kopiert und eingefügt, den code in Netbeans und es immer noch doesnt Arbeit
Ich bin immer die gleiche Fehlermeldung: run: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at GreetingClient.main(GreetingClient.java:10) Java Result: 1 ERSTELLEN ERFOLGREICH (Gesamtzeit: 0 Sekunden)
InformationsquelleAutor Padrus
Laufen
SocketServer
Sie brauchen, um pass-port auf dem server funktionieren wird. Zum Beispiel:Das problem ist, dass Sie wollen, um pass-port von java-argument, und Sie sind nicht zu tun. Zunächst vor der Verwendung von Variablen, sollten Sie zuerst überprüft haben.
Ihrem Programm erfordert params aber ich denke, dass Sie wahrscheinlich führen Sie das Programm ohne Parameter.
Führen Sie dieses Programm in dieser Art und Weise:
java -jar app.jar 1234
Aber Sie tun es auf diese Weise:
java -jar app.jar
In diesem Artikel erfahren Sie, wie die übergabe von Parametern an java-Programm mit netbeans http://netbeanside61.blogspot.com/2009/02/using-command-line-arguments-in.html.
Wenn Sie neu in java zunächst sollten Sie dieses tutorial Lesen,http://docs.oracle.com/javase/tutorial/networking/sockets/. Es ist sehr hilfreich.
Du hast das gleiche problem mit dem client. Sie versuchen, pass
arg[0]
als Hafen, aberarg
- array leer ist. Sollten Sie überprüfen, arg-array, bevor Sie es verwenden, und übergeben Sie den port für den client mit dem Befehl-Linie oder einfach nur hartcodieren den port für den client.haben ein anderes Aussehen, habe ich hardcoded die port-Nummer. Es ist nun: String sName = "ServerName"; int port = 9000;
Und du hast immer noch Ausnahme?
außerdem, warum bin ich immer noch der array-index out of bounds als eine Ausnahme, wenn ich nicht mehr mit args[]?
InformationsquelleAutor pepuch