Problème Socket Java architecture Client Serveur
Bonsoir à tous,
j'ai décidé de me lancer dans la programmation Sockets en JAVA. Je me suis donc lancer dans la réalisation d'un ptit t'chat.
J'ai commencer par faire un ptit programme avec un serveur qui reçoit un message et qui l'affiche et un client qui se connecte au serveur et envois les fameux messages.
Mais le soucis voilà, lorsque je lance mon serveur et mon client, le serveur m'affiche que la connexion s'est bien réalisé mais lorsque je veux envoyer un message avec la fenêtre client, le message part bien mais n'arrive jamais à destination... Le serveur reste en attente de lecture de données... je ne vois vraiment pas où est le soucis.
Aidez - moi !
Un grand merci d'avance!
ma classe pour le serveur Test.java :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class Test {
/**
* @param args
*/
JFrame fen;
static JTextArea pan;
public Test()
{
pan = new JTextArea("");
fen = new JFrame("Serveur");
pan.setBounds(15, 15, 380, 380);
pan.setEditable(false);
fen.setSize(400, 400);
fen.setLocationRelativeTo(null);
fen.add(pan);
fen.setResizable(false);
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fen.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Test();
BufferedReader in;
char[] car = new char[1];
try {
ServerSocket serveur = new ServerSocket(2123);
Socket client = serveur.accept();
if(client.isBound()) pan.append("Client connécté");
client.setKeepAlive(true);
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
while(in.read(car) != -1)
{
System.out.print(car[0]);
pan.append(""+car[0]);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} |
la classe pour le client TestClient.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class TestClient implements KeyListener {
JFrame fen;
static JTextField pan;
static BufferedWriter out;
public TestClient()
{
pan = new JTextField();
fen = new JFrame("Client");
pan.setBounds(10, 180, 375, 30);
pan.addKeyListener(this);
fen.setLayout(null);
fen.setSize(400, 400);
fen.setLocationRelativeTo(null);
fen.add(pan);
fen.setResizable(false);
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fen.setVisible(true);
}
public static void main (String[] args){
new TestClient();
try {
InetAddress ipLocal;
ipLocal = InetAddress.getLocalHost();
//ipDistante = InetAddress.getByName("192.168.1.5");
Socket liaisonServeur = new Socket("192.168.1.5", 2123, ipLocal, 2321);
out = new BufferedWriter(new OutputStreamWriter(liaisonServeur.getOutputStream()));
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyChar() =='\n'){
char[] tab = new char [pan.getText().length()];
for(int i=0; i<pan.getText().length(); i++)
{
tab[i] = pan.getText().charAt(i);
}
try {
System.out.println(tab);
out.write(tab);
pan.setText("");
} catch (IOException e1) {
// TODO Auto-generated catch block
System.out.println("Soucis!!");
e1.printStackTrace();
}
}
}
} |
autre probleme avec les socket
Bonjour,
je suis nouveau a ce forum et nouveaau en java socket
bref, si je mets au niveau client l IP : 127.0.0.1 tout fonctionne
Si je mets mon addresse public (une addresse que la societe a acheté)
ca ne fonctionne pas
merci vraiment pour votre
je suis un stagiaire et j etouffe la
code client : ******************
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
import java.io.*;
import java.net.*;
public class Requester{
Socket requestSocket;
ObjectOutputStream out;
ObjectInputStream in;
String message;
Requester(){}
void run()
{
try{
//1. creating a socket to connect to the server
requestSocket = new Socket("91.213.82.54", 2012);
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
String filepath= "D:\\Google Drive\\projet_teleassistance\\sdk\\trame.txt";
do{
try{
message = (String)in.readObject();
System.out.println("server>" + message);
BufferedReader buff = new BufferedReader(new FileReader(filepath));
String line;
while ((line = buff.readLine()) != null) {
sendMessage(line);
}
message = "bye";
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("client>" + msg);
}
catch(IOException ioException){
ioException.printStackTrace();
}
}
public static void main(String args[])
{
Requester client = new Requester();
client.run();
} |
*******************************************
CODE SERVEUR ******************************
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| import java.io.*;
import java.net.*;
public class Provider{
ServerSocket providerSocket;
Socket connection = null;
ObjectOutputStream out;
ObjectInputStream in;
String message;
Provider(){}
void run()
{
try{
//1. creating a server socket
providerSocket = new ServerSocket(2012, 10);
System.out.println("1");
//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
System.out.println("2");
out = new ObjectOutputStream(connection.getOutputStream());
out.flush();
System.out.println("3");
in = new ObjectInputStream(connection.getInputStream());
System.out.println("4");
sendMessage("Connection successful");
//4. The two parts communicate via the input and output streams
do{
try{
message = (String)in.readObject();
//traitement (message);
System.out.println("client>" + message);
if (message.equals("bye"))
sendMessage("bye");
}
catch(ClassNotFoundException classnot){
System.err.println("Data received in unknown format");
}
}while(!message.equals("bye"));
}
catch(IOException ioException){
ioException.printStackTrace();
System.out.println("couldn t listen on that port");
}
finally{
//4: Closing connection
try{
in.close();
out.close();
providerSocket.close();
}
catch(IOException ioException){
ioException.printStackTrace();
}
}
}
private void traitement(String message2) {
}
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[])
{
Provider server = new Provider();
while(true){
server.run();
}
}
} |