简单的Android套接字编程
我正在学习android socket编程。代码如下所示。在第一次单击按钮时,消息将成功发送到服务器,但在第二次单击之后,消息不会发送到服务器,也不会显示任何错误简单的Android套接字编程,android,sockets,Android,Sockets,我正在学习android socket编程。代码如下所示。在第一次单击按钮时,消息将成功发送到服务器,但在第二次单击之后,消息不会发送到服务器,也不会显示任何错误 public class MainActivity extends AppCompatActivity implements View.OnClickListener { private InetAddress address; private Button send; @Override protected void
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连接。那么你能为我提供一个解决方案吗?你永远不会关闭套接字。是的,这只是为了学习而写的。非常感谢。