Socket udp java
wiam_
Messages postés
188
Statut
Membre
-
wiam_ Messages postés 188 Statut Membre -
wiam_ Messages postés 188 Statut Membre -
Bonjour,
Bonsoit tt le monde ,
j'essaye de créer un client serveur udp en java , avec un prog très basique , mais le pb est que ça marche pas . voici mon code :
// coté client
le client se contente d'afficher :
ici client 1
ici client 2
et j'ai rien du coté serveur , et quand je lance le serveur , j'ai une erreur de sorte : Address already in use: Cannot bind
Merci bcp pour votre aide
Bonsoit tt le monde ,
j'essaye de créer un client serveur udp en java , avec un prog très basique , mais le pb est que ça marche pas . voici mon code :
// coté client
public class ClientTest extends Thread{
public void run(){
try {
byte[] tb = "messageTest".getBytes();
System.out.println("ici client 1");
DatagramPacket dp = new DatagramPacket(tb,tb.length,InetAddress.getLocalHost(),5000);
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
System.out.println("ici client 2");
}catch (IOException ioe){
ioe.printStackTrace();
}
}
}
// coté serveur
public class Serveur extends Thread{
public void run(){
try {
byte[] tb = new byte[100];
DatagramSocket ds = new DatagramSocket(900, InetAddress.getLocalHost());
System.out.println("je suis le serveur 0");
DatagramPacket dp = new DatagramPacket(tb,tb.length);
System.out.println("je suis le serveur 1");
ds.receive(dp);
System.out.println(new String (dp.getData(),0,dp.getOffset()));
System.out.println(" ca vient de :"+dp.getAddress()+":"+ dp.getPort());
ds.close();
System.out.println("je suis le serveur 2");
}catch (IOException ioe){
ioe.printStackTrace();
}
}
}
// et voici mon main
public static void main(String[] args) {
ClientTest c = new ClientTest();
c.start();
}
le client se contente d'afficher :
ici client 1
ici client 2
et j'ai rien du coté serveur , et quand je lance le serveur , j'ai une erreur de sorte : Address already in use: Cannot bind
Merci bcp pour votre aide
A voir également:
- Socket udp java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Tcp udp - Guide
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
7 réponses
Salut,
tu n'aurais pas un serveur des tes anciens essais qui tournerait encore?
L'erreur que tu as correspond au fait que ton port 900 est déjà utilisé.
Ou tu as peut être déjà quelque chose qui utilise ce port.
Pourquoi le client envoie sur le 5000 et le serveur écoute sur le 900? Il faut que ce soit le même port.
tu n'aurais pas un serveur des tes anciens essais qui tournerait encore?
L'erreur que tu as correspond au fait que ton port 900 est déjà utilisé.
Ou tu as peut être déjà quelque chose qui utilise ce port.
Pourquoi le client envoie sur le 5000 et le serveur écoute sur le 900? Il faut que ce soit le même port.
merci pour ta réponse,
oui t'as raison j'ai pas utilisé le même numéro de port, avec le même numéro de port il affiche bien le message . Mais parfois quand je lance mon main deux fois de suite , ça marche que la première fois , et la deuxième fois il me dit que l'adresse est déjà utilisée. Est ce que c normal parce que mon port reste toujours utilise.
Et une autre question , dans le main est ce que je suis obligé de lancer le client et le serveur ? il ne suffit pas de lancer que le client ? sinon lequel il faut lancer le premier?
Merci encore
oui t'as raison j'ai pas utilisé le même numéro de port, avec le même numéro de port il affiche bien le message . Mais parfois quand je lance mon main deux fois de suite , ça marche que la première fois , et la deuxième fois il me dit que l'adresse est déjà utilisée. Est ce que c normal parce que mon port reste toujours utilise.
Et une autre question , dans le main est ce que je suis obligé de lancer le client et le serveur ? il ne suffit pas de lancer que le client ? sinon lequel il faut lancer le premier?
Merci encore
Salut,
Je ne connais pas grand chose aux protocoles de communication, mais en lisant ce qui concerne UDP comparativement aux protocoles TCP et FTP, cela me donne l'impression que UDP ne relève pas d'un modèle client-serveur dans lequel un client et un serveur doivent d'abord se mettre d'accord pour établir une connexion.
Le protocole UDP n'est pas orienté connexion, est très simple, il peut servir pour des messages unidirectionnels (voir dossier CCM sur UDP)
Ceci étant, quand tu écris que tu veux « créer un client serveur udp en java » , je trouve bizarre et je me demande si le projet est cohérent au départ.
Mais je ne connais pas plus que ça le sujet.
Je ne connais pas grand chose aux protocoles de communication, mais en lisant ce qui concerne UDP comparativement aux protocoles TCP et FTP, cela me donne l'impression que UDP ne relève pas d'un modèle client-serveur dans lequel un client et un serveur doivent d'abord se mettre d'accord pour établir une connexion.
Le protocole UDP n'est pas orienté connexion, est très simple, il peut servir pour des messages unidirectionnels (voir dossier CCM sur UDP)
Ceci étant, quand tu écris que tu veux « créer un client serveur udp en java » , je trouve bizarre et je me demande si le projet est cohérent au départ.
Mais je ne connais pas plus que ça le sujet.
merci de m'avoir répondu ,
c'est justement ce que je veux faire, je veux que mon client envoie des messages en permanent au serveur , qui lit les messages en permanent à son tour aussi, mais ne renvoie rien au client.
tt se passe bien mais au bout d'un moment , j'ai des messages de genre "Address already in use: Cannot bind" , et ça continue après . Je sais pas si c du à un pb de synchronisation entre le serveur et le client ?
Merci
c'est justement ce que je veux faire, je veux que mon client envoie des messages en permanent au serveur , qui lit les messages en permanent à son tour aussi, mais ne renvoie rien au client.
tt se passe bien mais au bout d'un moment , j'ai des messages de genre "Address already in use: Cannot bind" , et ça continue après . Je sais pas si c du à un pb de synchronisation entre le serveur et le client ?
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je ne connais vraiment pas bien ces sujets.
Mais je viens de lire la page de Sebsauvage consacrée à TCP/IP
http://sebsauvage.net/comprendre/tcpip/
On y comprend bien ce que le protocole TCP fait de plus par rapport à UDP:
TCP est capable:
de faire tout ce que UDP sait faire (ports).
de vérifier que le destinataire est prêt à recevoir les données.
de découper les gros paquets de données en paquets plus petits pour que IP les accepte
de numéroter les paquets, et à la réception de vérifier qu'ils sont tous bien arrivés, de redemander les paquets manquants et de les réassembler avant de les donner aux logiciels. Des accusés de réception sont envoyés pour prévenir l'expéditeur que les données sont bien arrivées.
Comme il le dit bien:
L'avantage de TCP sur UDP est que TCP permet des communications fiables. L'inconvénient est qu'il nécessite une négociation
Donc dans le protocole TCP, il y a négociation, dans UDP il n'y en a pas.
Dans TCP, la communication entre un client et un serveur est une communication synchronisée = une connexion: il y a des échanges de messages entre ordinateurs concernant la façon dont se réalise chaque transfert de données.
Par exemple, en FTP, qui utilise TCP, il y a une réponse FTP sous forme de code à 3 chiffres qui revient systématiquement vers le client après que ce dernier ait envoyé un ordre vers le serveur FTP.
Tandis que dans le protocole UDP, il n'y a pas de vérifications échangées entre les deux ordinateurs communicants pour vérifier l'intégrité des messages transités; quand il reçoit un message, l'ordinateur récepteur ne répond pas systématiquement ( != serveur).
C'est ce que j'ai voulu dire et c'est bien ce que tu décris:
« mon client envoie des messages en permanent au serveur , qui lit les messages en permanent à son tour aussi, mais ne renvoie rien au client. »
Mais c'est "marrant" , tu termines en te demandant quand même:
« Je sais pas si c dû à un pb de synchronisation entre le serveur et le client ? »
C'est là que je trouve que ça manque de cohérence.
À partir de là, je me demande si cette apparente incohérence entre ce que tu vises et ce que fait effectivement le protocole UDP n'est pas source d'une erreur de conception.
Mais je répète, je ne suis pas calé sur ces sujets.
Et en plus je ne connais pas Java.
Et en plus je n'aime pas Java.
PS
TCP is a connection-oriented protocol, which means before a client can send messages with the server, a connection needs to be explicitly created to the server, and only then can the client-server communication take place. On the other hand, UDP is a connectionless protocol, which means no connection needs to be established between the client and the server for communication.
https://evolt.org/node/60276
Mais je viens de lire la page de Sebsauvage consacrée à TCP/IP
http://sebsauvage.net/comprendre/tcpip/
On y comprend bien ce que le protocole TCP fait de plus par rapport à UDP:
TCP est capable:
de faire tout ce que UDP sait faire (ports).
de vérifier que le destinataire est prêt à recevoir les données.
de découper les gros paquets de données en paquets plus petits pour que IP les accepte
de numéroter les paquets, et à la réception de vérifier qu'ils sont tous bien arrivés, de redemander les paquets manquants et de les réassembler avant de les donner aux logiciels. Des accusés de réception sont envoyés pour prévenir l'expéditeur que les données sont bien arrivées.
Comme il le dit bien:
L'avantage de TCP sur UDP est que TCP permet des communications fiables. L'inconvénient est qu'il nécessite une négociation
Donc dans le protocole TCP, il y a négociation, dans UDP il n'y en a pas.
Dans TCP, la communication entre un client et un serveur est une communication synchronisée = une connexion: il y a des échanges de messages entre ordinateurs concernant la façon dont se réalise chaque transfert de données.
Par exemple, en FTP, qui utilise TCP, il y a une réponse FTP sous forme de code à 3 chiffres qui revient systématiquement vers le client après que ce dernier ait envoyé un ordre vers le serveur FTP.
Tandis que dans le protocole UDP, il n'y a pas de vérifications échangées entre les deux ordinateurs communicants pour vérifier l'intégrité des messages transités; quand il reçoit un message, l'ordinateur récepteur ne répond pas systématiquement ( != serveur).
C'est ce que j'ai voulu dire et c'est bien ce que tu décris:
« mon client envoie des messages en permanent au serveur , qui lit les messages en permanent à son tour aussi, mais ne renvoie rien au client. »
Mais c'est "marrant" , tu termines en te demandant quand même:
« Je sais pas si c dû à un pb de synchronisation entre le serveur et le client ? »
C'est là que je trouve que ça manque de cohérence.
À partir de là, je me demande si cette apparente incohérence entre ce que tu vises et ce que fait effectivement le protocole UDP n'est pas source d'une erreur de conception.
Mais je répète, je ne suis pas calé sur ces sujets.
Et en plus je ne connais pas Java.
Et en plus je n'aime pas Java.
PS
TCP is a connection-oriented protocol, which means before a client can send messages with the server, a connection needs to be explicitly created to the server, and only then can the client-server communication take place. On the other hand, UDP is a connectionless protocol, which means no connection needs to be established between the client and the server for communication.
https://evolt.org/node/60276
Sur cette page
http://python.jpvweb.com/mesrecettespython/doku.php?id=client-serveur_udp_mini
je lis:
1- Le serveur UDP synchrone
C'est un serveur synchrone, c'est à dire que chaque requête doit attendre la fin du traitement de la requête précédente
Cela conduit à l'idée que ton serveur passe peut être trop vite d'un traitement à un autre, sans laisser le temps au port concerné d'être libéré.
Il faudrait peut être mettre un temporisation.
http://python.jpvweb.com/mesrecettespython/doku.php?id=client-serveur_udp_mini
je lis:
1- Le serveur UDP synchrone
C'est un serveur synchrone, c'est à dire que chaque requête doit attendre la fin du traitement de la requête précédente
Cela conduit à l'idée que ton serveur passe peut être trop vite d'un traitement à un autre, sans laisser le temps au port concerné d'être libéré.
Il faudrait peut être mettre un temporisation.
oui merci
j'ai mis un sleep(10) au niveau du client , et ça marche mieux , mais au bout d'un moment il remet l'erreur . donc , je crois que je dois augmenter le temps de mon sleep.
Merci pour ton aide.
j'ai mis un sleep(10) au niveau du client , et ça marche mieux , mais au bout d'un moment il remet l'erreur . donc , je crois que je dois augmenter le temps de mon sleep.
Merci pour ton aide.
Bonsoir tt le monde ,
c'est tjrs moi !!
cette fois ci , j'ai un programme serveur multi clients en udp, chaque clients est reconnu par son identifiant . Le serveur connait à priori les identifiants de ces clients . Je voudrais envoyé une requête pour un client précis en utilisant cet identifiant , comment je fait pour cela ?
Merci bcp pour votre aide !!!
Configuration: Windows Vista / Firefox 3.6
c'est tjrs moi !!
cette fois ci , j'ai un programme serveur multi clients en udp, chaque clients est reconnu par son identifiant . Le serveur connait à priori les identifiants de ces clients . Je voudrais envoyé une requête pour un client précis en utilisant cet identifiant , comment je fait pour cela ?
Merci bcp pour votre aide !!!
Configuration: Windows Vista / Firefox 3.6