我是新的socket编程,基本上想通过socket编程将多个数据从服务器(带python的PC)发送到我的android应用程序。问题是:
1)服务器确认abt 10+连接并停止接收客户端请求。在
2)客户端服务器挂起,不打印单个数据。在
试图同步异步任务,但似乎表面上不起作用,它应该如何。在
如果有任何建议能让它发挥作用,我们将不胜感激。在
package com.example.clientserver;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.concurrent.Semaphore;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView textResponse;
EditText editTextAddress, editTextPort;
Button buttonConnect, buttonClear;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextAddress = (EditText) findViewById(R.id.address);
editTextPort = (EditText) findViewById(R.id.port);
buttonConnect = (Button) findViewById(R.id.connect);
buttonClear = (Button) findViewById(R.id.clear);
textResponse = (TextView) findViewById(R.id.response);
buttonConnect.setOnClickListener(buttonConnectOnClickListener);
buttonClear.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
textResponse.setText("");
}
});
}
OnClickListener buttonConnectOnClickListener = new OnClickListener() {
@Override
public void onClick(View arg0) {
/*
* MyClientTask myClientTask = new MyClientTask(
* editTextAddress.getText().toString(),
* Integer.parseInt(editTextPort.getText().toString()));
* myClientTask.execute();
*/
RealTimeTask realTimeTask = new RealTimeTask(editTextAddress
.getText().toString(), Integer.parseInt(editTextPort
.getText().toString()));
realTimeTask.start();
}
};
public class RealTimeTask {
String dstAddress;
int dstPort;
String response = "";
RealTimeTask(String addr, int port) {
dstAddress = addr;
dstPort = port;
}
public void start() {
int loop = 0;
Semaphore semaphore = new Semaphore(1);
while (true) {
try {
Thread.sleep((long) 0.1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
semaphore.acquire();
} catch (InterruptedException e) {
System.out.println("got interrupted!");
}
MyClientTask myClientTask = new MyClientTask(dstAddress,
dstPort);
myClientTask.execute();
semaphore.release();
loop++;
}
}
}
public class MyClientTask extends AsyncTask<Void, Void, Void> {
String dstAddress;
int dstPort;
String response = "";
MyClientTask(String addr, int port) {
dstAddress = addr;
dstPort = port;
}
@Override
protected Void doInBackground(Void... arg0) {
Socket socket = null;
try {
socket = new Socket(dstAddress, dstPort);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(
1024);
byte[] buffer = new byte[1024];
int bytesRead;
InputStream inputStream = socket.getInputStream();
/*
* notice: inputStream.read() will block if no data return
*/
while ((bytesRead = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, bytesRead);
response += byteArrayOutputStream.toString("UTF-8");
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response = "UnknownHostException: " + e.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response = "IOException: " + e.toString();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
textResponse.setText(response);
super.onPostExecute(result);
}
}
}
PYTHON服务器
目前没有回答
相关问题 更多 >
编程相关推荐