2013-08-17 2 views
0

Я новичок в Программирование на Android.Ошибка связи TCP TCP

Мой код в Android выглядит следующим образом

public class AndroidClient extends Activity { 

EditText textOut; 
TextView textIn; 
Socket socket = null; 
DataOutputStream dataOutputStream = null; 
DataInputStream dataInputStream = null; 

/** Called when the activity is first created. */ 
@Override 

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_android_client); 

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 

new BackgroundDataTask().execute(""); 
}}; 

    public class BackgroundDataTask extends AsyncTask<String,String,String> { 

    private Exception ex; 
    @Override 
    protected String doInBackground(String... urls) { 

     try { 
      socket = new Socket("10.20.50.68", 8888); 
      dataOutputStream = new DataOutputStream(socket.getOutputStream()); 
      dataInputStream = new DataInputStream(socket.getInputStream()); 
      dataOutputStream.writeUTF(textOut.getText().toString()); 
      textIn.setText(dataInputStream.readUTF()); 
      socket = serverSocket.accept(); 

      textIn.setText(socket.getInetAddress().toString()); 
     } 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(); 
      } 
      } 
     } 

     return ""; 
    } 

} 


} 

У меня есть сервер в C# код код прослушивает порт и записывает выходной

Однако это работает только в первый раз, когда я введите текст и нажмите . Отправьте код, полученный на сервере, и я могу увидеть его в консоли, но после этого значение не будет получено. Так как я могу сохранить этот сокет? Что мне не хватает?

Спасибо Все

ответ

0

попробовать этот

создать класс Client.java

public class client{ 

Socket socket; 
int Port; 
InetAddress serverIp; 
public boolean connection; 
public client(String ip, int port) { 
    // TODO Auto-generated constructor stub 
    try { 
     serverIp = InetAddress.getByName(ip); 
     Port = port; 
        connect(); 
    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     connection = false; 
    } 

} 

public void connect(){ 
    try { 
      System.out.println("wait connection client "+serverIp+" "+Port); 
     socket = new Socket(serverIp, Port); 
     connection = true; 


    } catch (IOException e) { 
     //e.printStackTrace(); 
     connection = false; 
    } 

} 
    public boolean send(String message) throws IOException { 


    byte[] data=message.getBytes(); 
    OutputStream out = socket.getOutputStream(); 
    DataOutputStream dos = new DataOutputStream(out); 
    int len = data.length; 
    dos.writeInt(len); 
    if (len > 0) { 
     dos.write(data, 0, len); 
    } 
    return true; 
} 
public String read() { 
    InputStream in = null; 

    try { 
     in = socket.getInputStream(); 
    } catch (IOException e) { 
     connection=false; 
     e.printStackTrace(); 
    } 

    DataInputStream dis = new DataInputStream(in); 
    try { 
     int len = dis.readInt(); 
     byte[] data = new byte[len]; 
      if (len > 0) { 
       dis.readFully(data); 
      } 

      String result = new String(data, 0, data.length); 
      return result; 
    } catch (Exception e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
     connection=false; 
    } 
    return ""; 
} 

и создать объект Client.java в вашей деятельности OnCreate

client con=new client("10.20.50.68", 8888); 

и используйте con.send("your_data") для отправки и String data=con.read(); для получения данных. .. Если вы хотите асинхронное прослушивание данных в гнезде, используйте нить

Смежные вопросы