これで初心者ですので、私は愚かな質問をする場合は私を笑ってください。android UDP接続、データを受信していません
EclipseのPCエミュレータ&とアンドロイド電話
(または2つのアンドロイドフォンデバイス間)にUDP接続をしようとしています。
私はルータを持っていて、電話機はルータのWiFiネットワークを介してインターネットに接続しています。 PCも同じネットワーク上にあります(ダイレクトケーブルルータ-PC接続)。サーバースレッドからクライアントスレッドにテキストデータを送信しようとしていますが、何も送受信されません。 :(
サーバー Javaクラス(再編集、サーバはMSGを受信クライアントから。):
public class server implements Runnable
{
// the Server's Port
public static final int SERVERPORT = 6000;
// running Server thread.
public void run()
{
Log.d("redwing","server thread started.");
DatagramSocket serverSocket = null;
try
{
// Open Server Port
serverSocket = new DatagramSocket(server.SERVERPORT);
byte[] receiveData = new byte[32];
byte[] sendData = new byte[32];
// loop until "server_finished" becomes False.
while(createserver.server_finished)
{
if(renderer.gGL!=null) // ignore me, just a null pointer checker
{
// waiting for the incoming client's message packet
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
renderer.recv = new String(receivePacket.getData());
Log.d("server","packet received from client, ETA " + timing.getNow() + " " + renderer.recv); // timing getNow - just returns current system minute & second.
// server is replying to the client back with a message.
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
sendData = new String("server msg").getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
renderer.sent = new String(sendData, 0, sendData.length);
Log.d("server","packet sent to client, ETA " + timing.getNow() + " " + renderer.sent); // timing getNow - just returns current system minute & second.
}
}
// close the socket
if(serverSocket!=null) serverSocket.close();
serverSocket = null;
}
catch (Exception e)
{
Log.e("server", "Error", e);
if(serverSocket!=null) serverSocket.close();
serverSocket = null;
}
finally
{
if(serverSocket!=null) serverSocket.close();
serverSocket = null;
}
Log.d("redwing","server thread terminated.");
}
}
とクライアントにはないクライアント Javaクラス(再編集、 )サーバーからMSGを受け取る:
public class client implements Runnable
{
public static final int CLIENTPORT = 5000;
// running Client thread.
public void run()
{
Log.d("redwing","client thread started.");
DatagramSocket clientSocket = null;
try
{
// getting local address
clientSocket = new DatagramSocket(server.SERVERPORT);
InetAddress IPAddress = InetAddress.getByName("192.168.0.100");
// displaying IP & hostname.
Log.d("client", "IP: " + IPAddress.getHostAddress() + " Name: " + IPAddress.getHostName());
byte[] sendData = new byte[32];
byte[] receiveData = new byte[32];
// Loop until client_finished becomes False.
while(createclient.client_finished)
{
if(renderer.gGL!=null) // ignore me, just a null pointer checker
{
// sending a message to the server
sendData = timing.getNow().getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, client.CLIENTPORT);
clientSocket.send(sendPacket);
renderer.sent = new String(sendData,0,sendData.length);;
Log.d("client","packet sent to server, ETA " + timing.getNow());
// waiting for the server packet message.
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
renderer.recv = new String(receivePacket.getData());
Log.d("client","packet received from server, ETA " + timing.getNow());
}
}
// close the socket
if(clientSocket!=null) clientSocket.close();
clientSocket = null;
}
catch (Exception e)
{
Log.e("client", "Error", e);
if(clientSocket!=null) clientSocket.close();
clientSocket = null;
}
finally
{
if(clientSocket!=null) clientSocket.close();
clientSocket = null;
}
Log.d("redwing","client thread terminated.");
}
}
Permisionsは、マニフェストで有効になっています
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<user-permission android:name="android.permission.NETWORK" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
私はアンドロイドPCエミュレータでサーバを実行していて、アンドロイド携帯電話でクライアントを実行しています。
両方のクライアント&サーバスレッドはうまく動作しますが...問題は、それらの間で交換されたデータがないことです。 クライアントはanytingを受信せず、サーバーは何も受け取りません。パケットは送信されますが、何も受信されません。
何が間違っていますか?
私を助けてください。
ありがとうございます。
答えてくれてありがとう。エミュレータをロードした後、コマンドプロンプトを表示して「telnet localhost」を書きますが、コンソールに「localhostに接続しています...ポート23のホストへの接続を開くことができませんでした:接続に失敗しました」というエラーが表示されます – redbase
telnetサービスが実行されていません。コントロールパネル、サービスからtelnetを起動したわけではありませんが、今はログインとパスの入力を求められます。これは何のため ? – redbase
私の悪いことを申し訳ありません - コマンドプロンプトで "telnet localhost <エミュレータポート5554>"と入力し、上記の指示に従ってください。 –