如何解决如何在两个android设备之间创建套接字,套接字在主线程上不起作用,从而产生问题
我已经成功地在两台设备之间建立了连接,但要传输文件数据,我必须创建套接字,但我经常失败。犯错误后,我知道套接字在主线程之外的不同线程上工作。所以我创建了线程,但是我得到空指针异常意味着该值是空的,我不知道如何?? 这是我从不同的来源和教程中尝试过的。
senddatatry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg=trytext.getText().toString();
receivedata.write(msg);
}
});
final WifiP2pManager.ConnectionInfoListener connectionInfoListener = new WifiP2pManager.ConnectionInfoListener() {
@Override
public void onConnectionInfoAvailable(final WifiP2pInfo info) {
inetAddress = info.groupOwnerAddress;
if (info.groupFormed && info.isGroupOwner) {
deviceStatus.setText("Host");
ServerClass serverClass = new ServerClass();
serverClass.start();
} else if (info.groupFormed) {
deviceStatus.setText("Client");
Thread thread1 = new Thread() {
@Override
public void run() {
super.run();
clientClass = new ClientClass(inetAddress);
clientClass.start();
}
};
thread1.start();
}
}
};
public class ServerClass extends Thread{
Socket socket;
ServerSocket serverSocket;
@Override
public void run() {
super.run();
try {
serverSocket=new ServerSocket(8888);
socket=serverSocket.accept();
InputStream input=socket.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(input));
final String msg=reader.readLine();
handler.post(new Runnable() {
@Override
public void run() {
deviceStatus.setText(msg);
}
});
Log.d("server","test");
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class ClientClass extends Thread{
Socket socket;
OutputStream outputStream;
final String hstname;
public ClientClass(InetAddress address)
{
this.hstname=address.getHostName();
}
@Override
public void run() {
super.run();
if(hstname!=null){
try {
socket.connect(new InetSocketAddress(hstname,8888),1000);
outputStream=socket.getOutputStream();
receivedata=new receivedata(outputStream);
receivedata.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class receivedata extends Thread{
OutputStream outputStream;
public receivedata (OutputStream stream){
this.outputStream=stream;
}
@Override
public void run() {
super.run();
Log.d("start","thread working");
}
public void write(String msg){
PrintWriter writer=new PrintWriter(outputStream,true);
writer.println(msg);
}
}
我在 clicklistner 上从接收字符串的位置添加了按钮,并且添加了服务器类、客户端类以及它们已被初始化的位置 我已经经历了我知道的所有可能的方式,但我失败了。 请任何人建议我如何成功创建套接字来传输数据。请这是一个卑微的要求,我试过了,但我不知道。因此,如果您能对此提出建议或帮助我,那就太好了
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。