简单的Android套接字编程

简单的Android套接字编程,android,sockets,Android,Sockets,我正在学习android socket编程。代码如下所示。在第一次单击按钮时,消息将成功发送到服务器,但在第二次单击之后,消息不会发送到服务器,也不会显示任何错误 public class MainActivity extends AppCompatActivity implements View.OnClickListener { private InetAddress address; private Button send; @Override protected void

我正在学习android socket编程。代码如下所示。在第一次单击按钮时,消息将成功发送到服务器,但在第二次单击之后,消息不会发送到服务器,也不会显示任何错误

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  private InetAddress address;
  private Button send;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      send = (Button) this.findViewById(R.id.Send);
      send.setOnClickListener(this);
  }
  @Override
  public void onClick(View v) {
      new Sender().execute("xxx.xxx.xx.xxx");
  }
  private class Sender extends AsyncTask<String, Void, Void> {
      private Socket socket;
      private Connector connector;
      public Sender() {}
      @Override
      protected Void doInBackground(String... params) {
          try {
              address = InetAddress.getByName(params[0]);
              socket = new Socket(address, 10001);
              connector = new Connector(socket);
              connector.write("Hello server, this is client");
          } catch (UnknownHostException e) {
              Log.d("Error", e.getLocalizedMessage());
          } catch (IOException e) {
              Log.d("Error", e.getLocalizedMessage());
          }
          return null;
      }
  }
}





public class Connector {
  private Socket socket;
  private PrintWriter writer;
  public Connector(Socket soc) {
      socket = soc;
      try {
          writer = new PrintWriter(socket.getOutputStream(), true);
      } catch (IOException e) {
          Log.d("Error", e.getLocalizedMessage());
      }
  }
  public void write(String message) {
      writer.println(message);
  }
}
public类MainActivity扩展AppCompatActivity实现View.OnClickListener{
私人地址;
私人按钮发送;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
send=(按钮)this.findviewbyd(R.id.send);
send.setOnClickListener(this);
}
@凌驾
公共void onClick(视图v){
新发送方().execute(“xxx.xxx.xx.xxx”);
}
私有类发送方扩展异步任务{
专用插座;
专用连接器;
公共发送方(){}
@凌驾
受保护的Void doInBackground(字符串…参数){
试一试{
address=InetAddress.getByName(参数[0]);
插座=新插座(地址,10001);
连接器=新连接器(插座);
write(“你好,服务器,这是客户机”);
}捕获(未知后异常e){
Log.d(“Error”,例如getLocalizedMessage());
}捕获(IOE异常){
Log.d(“Error”,例如getLocalizedMessage());
}
返回null;
}
}
}
公共类连接器{
专用插座;
私人版画作家;
公共连接器(插座soc){
socket=soc;
试一试{
writer=新的PrintWriter(socket.getOutputStream(),true);
}捕获(IOE异常){
Log.d(“Error”,例如getLocalizedMessage());
}
}
公共无效写入(字符串消息){
writer.println(消息);
}
}

每次单击按钮时,您都在建立一个新的websocket连接。那么,您能为我提供一个解决方案吗?您永远不会关闭套接字。是的,这只是为了学习而编写的。谢谢你每次点击按钮都会建立一个新的websocket连接。那么你能为我提供一个解决方案吗?你永远不会关闭套接字。是的,这只是为了学习而写的。非常感谢。