Я новичок в программировании на Android и пытаюсь отправить некоторые текстовые данные на ПК через TCP.
Я создал пример, который нашел в Интернете, который имеет клиент Android и сервер Java..
Сервер работает нормально.
Когда я запускаю Android-клиент на эмуляторе или на телефоне, оба прекрасно работают.
Проблема в том, что он мне нужен для связи с приложением C #, поэтому я создал TCPсервер в C #.
Теперь, если я запускаю Клиент на эмуляторе, он работает, и сервер C # получает данные (немного запутано, но, вероятно, это проблема кодирования текста, которую, я думаю, не составит труда решить).Но в любом случае данные поступают на сервер c #.
Если я пытаюсь запустить тот же клиент на телефоне, я даже не могу подключиться к серверу C #.Я получаю сообщение об ошибке тайм-аута при подключении.
Также я могу пинговать ПК с телефона и пинговать телефон с ПК, поэтому не думаю, что это проблема сети.
У меня есть некоторый опытв C #, но не так много на сокетах и даже меньше на Android.Поэтому я спрашиваю, есть ли разница в протоколах TCP, используемых Java и C #?Извините, если это глупый вопрос, но я гуглил его часами и не нашел подсказки.
Есть идеи о том, что может быть причиной этого?
Код Java-сервера такой:
public class Servidor {
private static boolean executando = true;
private static String mensagem;
private static final int PORTA = 1234;
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(1234);
InetAddress addr = InetAddress.getLocalHost();
System.out.println("----------- SERVER CONNECTED "
+ addr.getHostAddress() + " PORT " + PORTA
+ " -----------");
System.out.println("Waiting connections.");
Socket socket = server.accept();
System.out.println("Server -> Connected Ip "
+ socket.getInetAddress().getHostAddress());
DataInputStream in = new DataInputStream(socket.getInputStream());
try {
while (executando) {
mensagem = in.readUTF();
System.out.println("Server-> Received Message: "
+ mensagem);
}
System.out.println("Servidor-> Finalizado.");
in.close();
socket.close();
server.close();
} catch (Exception e) {
System.err.println("Server -> Error: " + e.getMessage());
executando = false;
}
} catch (Exception e) {
e.printStackTrace();
}
} }
Код сервера C # выглядит следующим образом:
class Server
{
private TcpListener tcpListener;
private Thread listenThread;
public Server()
{
Console.WriteLine("\nStarting server...");
this.tcpListener = new TcpListener(IPAddress.Any, 1234);
this.listenThread = new Thread(new ThreadStart(ListenForClients));
this.listenThread.Start();
}
private void ListenForClients()
{
Console.WriteLine("\nWaiting for clients to connect...");
this.tcpListener.Start();
while (true)
{
blocks until a client has connected to the server
TcpClient client = this.tcpListener.AcceptTcpClient();
create a thread to handle communication
with connected client
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
private void HandleClientComm(object client)
{
Console.WriteLine("\nIncoming from client...");
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[4096];
int bytesRead;
while (true)
{
bytesRead = 0;
try
{
blocks until a client sends a message
bytesRead = clientStream.Read(message, 0, 4096);
}
catch
{
a socket error has occured
break;
}
if (bytesRead == 0)
{
the client has disconnected from the server
break;
}
message has successfully been received
ASCIIEncoding encoder = new ASCIIEncoding();
Console.WriteLine("\nReceived: \n\n" + encoder.GetString(message, 0, bytesRead));
}
tcpClient.Close();
}
}
При необходимости код клиента Android в точности совпадает с кодом по следующей ссылке:
http://www.portalandroid.org/comunidade/viewtopic.php?f=7&t=11077&p=127577