Java套接字-实时传输

Java套接字-实时传输,java,android,sockets,networking,loops,Java,Android,Sockets,Networking,Loops,我从Android Blogger Spot获得了这段代码,非常感谢他让我几乎理解了java中的基本套接字连接。所以我在我的android设备上安装了这个客户端应用程序,服务器正在运行,但是我如何在客户端代码中创建一个循环,使它能够实时地从EditText发送数据呢?(每当它改变时)请问是否有人能为一个完全的新手清除它 -----这是客户端代码(安卓版权所有): -----这是服务器代码(Android er版权): 有几件事你需要改变 首先,如果希望实时发送数据,则需要从使用ClickList

我从Android Blogger Spot获得了这段代码,非常感谢他让我几乎理解了java中的基本套接字连接。所以我在我的android设备上安装了这个客户端应用程序,服务器正在运行,但是我如何在客户端代码中创建一个循环,使它能够实时地从EditText发送数据呢?(每当它改变时)请问是否有人能为一个完全的新手清除它

-----这是客户端代码(安卓版权所有):

-----这是服务器代码(Android er版权):


有几件事你需要改变

首先,如果希望实时发送数据,则需要从使用ClickListener上的按钮更改为使用TextWatcher(请参阅中的addTextChangedListener)


由于每次文本更改时都会触发此事件,因此您需要在事件外部打开套接字(您不希望每次键入某些文本时都有一个新的套接字),然后在侦听器中,您只想将新数据发送到套接字。

您可以在EditText上设置一个文本更改的侦听器,然后从那里进行发送

edittext.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
 // ... do your sending here
}

但是要注意,如果发送不是异步的,它可能会阻止用户输入文本。在GSM网络上,网络延迟可能相对较高,因此当用户新键入的字符不会立即出现在屏幕上时,用户可能会感到恼火。

谢谢您的帮助!我在事件onSensorChanged外部打开新套接字-因为我想向pc发送传感器数据,并创建新的dataOutputStream,但当我在事件内部使用dataOutputStream.WriteUTF时,它只发送一次。。有什么问题吗?确保你没有关闭你的插座,并且确保你在每次写入后都会刷新插座。
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();
    dataInputStream = new DataInputStream(socket.getInputStream());
    dataOutputStream = new DataOutputStream(socket.getOutputStream());
    System.out.println("ip: " + socket.getInetAddress());
    System.out.println("message: " + dataInputStream.readUTF());
    dataOutputStream.writeUTF("Hello!");
   } 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();
     }
    }
   }
  }
 }
}
edittext.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
 // ... do your sending here
}