Мне нужно перенести файл с определенного компьютера с Windows на устройство Android в другой сети;Как я могу узнать IP-адрес сервера Android?
Привет.
Итак, у меня есть это приложение в Windows, которое берет любой файл из пути, преобразует его в байт [], подключается к определенному IPи отправляет его с NetworkStream;
на другом конце У меня есть приложение Xamarin для Android, которое прослушивает входящие соединения с любого IP, а затем сохраняет входящие байты в папке.
Работает налокальная сеть, но теперь я хочу, чтобы она работала удаленно в 2 отдельных сетях (скажем, ПК, подключенный через Ethernet, и телефон Android, подключенный через 4G).Я работаю в предположении, что у меня уже есть IPv4-адрес компьютера Android.
Я попытался найти его и думаю, что мне нужно выполнить поиск DNS, чтобы понять, куда отправлять мои байты, но ядействительно не могу понять, как.
Я думаю, что мне не хватает какого-то важного шага о том, как перевести IP-адрес телефона, чтобы приложение Windows могло подключиться к нему.Чего мне не хватает?
// Код клиента Windows // Отправляет файл при нажатии кнопки
string ipaddress = IPText.Text; //takes the written IP address
string filepath = ApkPathText.Text; //takes the written path to the file
Stream filestream;
byte[] bytestream;
try {
filestream = File.OpenRead(filepath);
bytestream = new byte[filestream.Length];
filestream.Read(bytestream, 0, (int)filestream.Length);
} catch (UnauthorizedAccessException err) {
return;
} catch (FileNotFoundException err) {
return;
} catch (IOException err) {
return;
}
NetworkStream networkStream;
TcpClient clientSocket;
try {
clientSocket = new TcpClient(ipaddress, 8080); //Maybe it needs a different ip??
networkStream = clientSocket.GetStream();
networkStream.Write(bytestream, 0, bytestream.GetLength(0));
networkStream.Close();
} catch (SocketException se) {
DebugLog("Impossibile aprire socket! ["+se+"]");
return;
}
}
// Код Android-сервера
public class MainActivity : AppCompatActivity
{
private Socket client;
private void Listener() {
TcpListener tcpListener = new TcpListener(IPAddress.Any, 8080);
tcpListener.Start();
bool can_Exit = false;
do {
Socket socket = tcpListener.AcceptSocket();
if (socket.Connected) {
ThreadStart tStarter = new ThreadStart(Acceptor);
Thread tAcceptor = new Thread(tStarter);
tAcceptor.Start();
}
} while (!can_Exit);
}
private void Acceptor() {
Socket socket = (Socket)client;
NetworkStream networkStream = new NetworkStream(socket);
int thisRead = 0;
int blockSize = 1024;
Byte[] dataStream = new Byte[blockSize];
Stream fileStream = null;
lock (this) {
String dirPath = @"sdcard/";
String filePath = @"file.file";
String totalPath = dirPath + filePath;
if (!Directory.Exists(dirPath)) {
Directory.CreateDirectory(dirPath);
}
try {
fileStream = File.OpenWrite(totalPath);
} catch (IOException err) {
return;
}
bool can_Exit = false;
try {
do {
thisRead = networkStream.Read(dataStream, 0, blockSize);
fileStream.Write(dataStream, 0, thisRead);
if (thisRead == 0) {
can_Exit = true;
}
} while (!can_Exit);
fileStream.Close();
} catch (UnauthorizedAccessException err) {
return;
} catch (FileNotFoundException err) {
return;
} catch (IOException err) {
return;
}
}
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
ThreadStart tStarter = new ThreadStart(Listener);
Thread tListener = new Thread(tStarter);
tListener.Start();
}
}
}
Он должен успешно подключиться, но вместо этого клиент Windows возвращает сообщение «Ошибка попытки подключения из-за того, что подключенная сторона не ответила должным образом через некоторое время, или из-за сбоя установленного подключения из-за того, что подключенный хост не ответил»