【发布时间】:2017-11-19 02:53:56
【问题描述】:
我在互联网上找到了一个教程,它允许客户端(android 应用程序)-服务器(netbeans 上的 java)套接字,它允许我在任一端发送和接收数据/字符串。用户必须手动将数据输入到 EditText 中,然后使用 on click 方法按下按钮发送。
主活动
public class MainActivity extends AppCompatActivity {
EditText e1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
e1 = (EditText) findViewById(R.id.etMessage);
Thread myThread = new Thread(new MyServerThread());
myThread.start();
}
class MyServerThread implements Runnable{
Socket s;
ServerSocket ss;
InputStreamReader isr;
BufferedReader bufferedReader;
Handler h = new Handler();
String message;
@Override
public void run() {
try{
ss = new ServerSocket(2222);
while(true){
s = ss.accept();
isr = new InputStreamReader(s.getInputStream());
bufferedReader = new BufferedReader(isr);
message = bufferedReader.readLine();
h.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),message, Toast.LENGTH_SHORT).show();
}
});
}
}catch (IOException e){
e.printStackTrace();
}
}
}
public void send(View v){
MessageSender messageSender = new MessageSender();
messageSender.execute(e1.getText().toString());
}
}
消息发送者
public class MessageSender extends AsyncTask<String,Void,Void>{
Socket s;
DataOutputStream dos;
PrintWriter pw;
@Override
protected Void doInBackground(String... voids) {
String message = voids[0];
try{
s = new Socket("192.168.254.105",2222);
pw = new PrintWriter(s.getOutputStream());
pw.write(message);
pw.close();
s.close();
}catch (IOException e){
e.printStackTrace();
}
return null;
}
}
现在我接下来要做的不是手动在 GUI 中输入文本并按下发送按钮,而是想在 TextView 上从另一个活动发送一个字符串,比如说 Activity1.class 到 MainActivity.class 使用以下代码。(显示 Textview 包含文本“Hello”)
String message = show.getText().toString();
Intent intent= new Intent(Activity1.this, MainActivity.class);
intent.putExtra("message_key", message);
startActivity(intent);
Ans 将在 Main Activity 上调用它
String message = getIntent().getStringExtra("message_key");
passedMessage = (TextView)findViewById(R.id.tvPassed);
passedMessage.setText(message);
问题是在运行程序后,传递给 MainActivity 上 textview 的字符串只会显示在 gui 上,但不会发送到套接字本身。知道如何使它工作吗?
【问题讨论】:
-
您发布的所有代码都是从 Activity1 中的 TextView 中获取一个字符串并将其粘贴到 MainActivity 中的 TextView 中。调用passedMessage.setText(message) 后,需要编写实际将字符串发送到服务器的代码!您不将字符串发送到服务器套接字的原因是因为您从未告诉它这样做!
标签: java sockets android-studio