client:problème de programmation socket java
import java.io.*;
import java.net.*;
public class Requester
{
Socket requestSocket;
ObjectOutputStream out;
ObjectInputStream in;
String message;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Requester(){}
void run() throws IOException
{
try{
//1. creating a socket to connect to the server
requestSocket = new Socket("172.16.3.219", 2004);
System.out.println("Connected to localhost in port 2004");
//2. get Input and Output streams
out = new ObjectOutputStream(requestSocket.getOutputStream());
out.flush();
in = new ObjectInputStream(requestSocket.getInputStream());
//3: Communicating with the server
do{
try{
message = (String)in.readObject();
System.out.println("server>" + message);
message=br.readLine();
sendMessage(message);
}
catch(ClassNotFoundException classNot)
{
System.err.println("data received in unknown format");
}
}while(!message.equals("bye"));
}
catch(UnknownHostException unknownHost)
{
System.err.println("You are trying to connect to an unknown host!");
}
catch(IOException ioException)
{
ioException.printStackTrace();
}
finally
{
//4: Closing connection
try{
in.close();
out.close();
requestSocket.close();
}
catch(IOException ioException)
{
ioException.printStackTrace();
}
}
}
void sendMessage(String msg)
{
try{
out.writeObject(msg);
out.flush();
System.out.println("client1>" + msg);
}
catch(IOException ioException)
{
ioException.printStackTrace();
}
}
public static void main(String args[]) throws IOException
{
Requester client = new Requester();
client.run();
}
}
serveur:
import java.io.*;
import java.net.*;
public class Provider
{
ServerSocket providerSocket;
Socket connection = null;
ObjectOutputStream out;
ObjectInputStream in;
String message;
Provider(){}
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
void run()
{
try{
//1. creating a server socket
providerSocket = new ServerSocket(2004, 10);
//2. Wait for connection
System.out.println("Waiting for connection");
connection = providerSocket.accept();
System.out.println("Connection received from" + connection.getInetAddress().getHostName());
//3. get Input and Output streams
out = new ObjectOutputStream(connection.getOutputStream());
out.flush();
in = new ObjectInputStream(connection.getInputStream());
sendMessage("Connection successful");
//4. The two parts communicate via the input and output streams
do
{
try
{
message = (String)in.readObject();
System.out.println("client>" + message);
if (message.equals("bye"))
{
sendMessage("bye");
}
else
{
message=br.readLine();
sendMessage(message);
}
}
catch(ClassNotFoundException classnot)
{
System.err.println("Data received in unknown format");
}
}while(!message.equals("bye"));
}
catch(IOException ioException)
{
ioException.printStackTrace();
}
finally
{
//4: Closing connection
try{
in.close();
out.close();
providerSocket.close();
}
catch(IOException ioException)
{
ioException.printStackTrace();
}
}
}
void sendMessage(String msg)
{
try
{
out.writeObject(msg);
out.flush();
System.out.println("server>" + msg);
}
catch(IOException ioException)
{
ioException.printStackTrace();
}
}
public static void main(String args[])throws IOException
{
Provider server = new Provider();
while(true)
{
server.run();
}
}
}
programme
Server est à 172.16.3.219. Si le serveur et le client sont dans un système (172.16.3.219), les programmes fonctionnent. Si un programme mon client est placé dans un autre système, disons 172.16.3.30 je reçois des exceptions (le serveur est toujours au 172.16.3.219). Dois-je changer le constructeur socket(). Si le problème est avec le constructeur me suggérer le constructeur approprié lorsque le client et le serveur sont dans des systèmes différents
Quelles exceptions? Montrez-nous la trace de la pile. –
Quelle exception obtenez-vous? –
à java.net.PlainSocketImpl.socketConnect (Méthode natif) à java.net.AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl.java:310) à java.net.AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl.java:176) à java.net .AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl.java:163) à java.net.SocksSocketImpl.connect (SocksSocketImpl.java:384) à java.net.Socket.connect (Socket.java:542) à java.net.Socket .connect (Socket.java:492) à java.net.Socket. (Socket.java:389) –
Jagan