Bonjour, je suis très nouveau dans la programmation java et je suis vraiment bloqué pour obtenir un serveur de socket et un client fonctionnant comme je le souhaite.Aide serveur de sockets Java
Le problème est im avoir ...
serveur:
Im regardant la sortie du client et une fois client imprime « TIME » le serveur renvoie un message par exemple « le temps est .. ". Le serveur le fait mais pas tout de suite il semble l'envoyer la deuxième fois que vous envoyez un message du client.
Est-ce parce que le client n'est peut-être pas connecté tout le temps?
Im assez sûr que cette méthode est fausse quelqu'un peut-il me donner un conseil.
Toute aide serait géniale.
Luke
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
public static void main(String[] args){
ServerSocket serverSocket = null;
Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
try {
serverSocket = new ServerSocket(8888);
System.out.println("Listening :8888");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true){
try {
socket = serverSocket.accept();
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
dataOutputStream = new DataOutputStream(socket.getOutputStream());
System.out.println("ip: " + socket.getInetAddress());
System.out.println("message: " + dataInputStream.readUTF());
dataOutputStream.writeUTF("Hello!");
try{
String line = in.readLine();
if (line.contains("TIME")){
dataOutputStream.writeUTF("TIME IS....."); // ITS HERE THE PROBLEM MAY BE ?
{
} catch (IOException e){
System.out.println("Read failed");
System.exit(1);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(socket!= null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(dataInputStream!= null){
try {
dataInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(dataOutputStream!= null){
try {
dataOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
Le client Android
UPDATE, je pense que le problème est avec le client que d'être connecté lorsque vous envoyez un message. Comment ai-je une boucle de lecture ici qui n'affectera pas quand j'envoie des données à partir du client.
package com.exercise.AndroidClient;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class AndroidClient extends Activity {
EditText textOut;
TextView textIn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textOut = (EditText)findViewById(R.id.textout);
Button buttonSend = (Button)findViewById(R.id.send);
textIn = (TextView)findViewById(R.id.textin);
buttonSend.setOnClickListener(buttonSendOnClickListener);
}
Button.OnClickListener buttonSendOnClickListener
= new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;
try {
socket = new Socket("192.168.1.101", 8888);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream.writeUTF(textOut.getText().toString());
textIn.setText(dataInputStream.readUTF());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if (socket != null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (dataOutputStream != null){
try {
dataOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (dataInputStream != null){
try {
dataInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}};
}
Merci beaucoup d'avoir pris le temps de répondre. Cela aide bien que ce n'est pas ce qui après. Il semble que mon client est connecté seulement quand il veut envoyer des données d'où il ne recevra pas les données après que le client a envoyé "temps". Je pense que j'ai besoin que le client fasse une boucle en attendant les données entrantes. Est-ce que cela ne fonctionnera pas comme je me sens des douilles ne peux pas transmettre et recevoir en même temps? Bravo encore – Luke
Oui, vous devez également boucler le client. Vous envoyez quelque chose au serveur immédiatement lu dans le flux. Cela va attendre les données entrantes.Bonne chance;) – Baldur
J'ai maintenant mis en place mon code client de base, pouvez-vous jeter un coup d'œil et peut-être suggérer comment je peux adapter ce code pour avoir une boucle de lecture et être capable d'écrire des données. Merci encore pour votre temps. – Luke