我正在一个项目中,Android应用程序将拆分一个秘密(Shamir秘密共享)并与多个收件人共享。
我使用了JerzySkalski在this中提供的秘密共享方案 线。我正在将Android应用程序初始化为侦听端口8700的套接字服务器。秘密共享收件人程序在Linux计算机上运行。因此,基本上,当共享准备就绪时,Android将启动套接字服务器,并继续接受连接,并根据客户端ID为客户端分配共享。
我遇到了一个问题,我的Android应用程序没有收到来自Linux收件人的任何连接请求。它今天晚上在公共网络上曾经工作过一次,我一直在尝试在家里复制它,但是它不起作用。我试图切换到热点,但仍然无法正常工作。现在我想知道代码是否正确,因此需要您的帮助。
我的Android代码: 它在AsyncTask内运行
protected Void doInBackground(Void... params)
{
try {
//create a new socket with the given port and IP address
server = new ServerSocket(8700,50,InetAddress.getByName("10.16.16.33"));
int port=server.getLocalPort();
System.out.print("port : " + port);
System.out.print("addr"+server.getInetAddress().getHostAddress());
System.out.println("\n \n Server socket created, waiting for client to connect .. ");
while (client_count<n) {
//start accepting connections in the socket created
new server_socket(server.accept());
}
}
}
class server_socket extends Thread {
Socket ser_soc;
private server_socket(Socket socket) {
ser_soc = socket;
start();
}
public void run() {
try {
System.out.println("client connected ... ");
if (KEK_share_count < KEK_n)
send_KEK_shares();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
收件人代码:
int client_id=Integer.parseInt(args[0]);
System.out.println("Recipient #"+client_id);
port=Integer.parseInt(args[1]);
server_ip=args[2];
System.out.println("\n Connecting to server "+server_ip+ " on port : "+port+" to receive share." );
client_soc=new Socket(InetAddress.getByName(server_ip),port);
get_shares(client_id);
我检查了手机的IP地址,并在Android应用程序中对该值进行了硬编码以进行测试。 我正在以这种方式运行Java代码: java -jar Test.jar 1 8700 10.16.16.33