ورود

View Full Version : اتصال اندروید کلاینت به سرور درون کامپوتر



MohammadHadi2031
چهارشنبه 25 دی 1392, 09:28 صبح
سلام من این کد رو برای اتصال موبایل به کامپوتر با استفاده از شبکه وای فای انجام دادم با اینکه با ماشین مجازی کارکرد اما روی گوشیم در مرحله connecting می ماند به نظر شما مشکل کجا است


public class MainActivity extends Activity {

EditText editText ;
Button send ;
public static TextView txt;


/////
private String serverMessage;
public static final String SERVERIP = "192.168.1.100";
public static final int SERVERPORT = 4444;
private OnMessageReceived mMessageListener = null;
private boolean mRun = false;
PrintWriter out;
BufferedReader in;
DataOutputStream dataOutputStream = null;
Thread t;

Runnable con=new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
mRun = true;
try {
InetAddress serverAddr = InetAddress.getByName(SERVERIP);
Log.e("TCP Client", "C: Connecting...");

MainActivity.txt.setText("C: Connecting..."+serverAddr);

//Socket socket = new Socket("192.168.1.1", SERVERPORT);
Socket socket = new Socket(serverAddr, SERVERPORT);
/// //os = socket.getOutputStream();

if(socket.isBound())
{
Log.i("SOCKET", "Socket: Connected");
MainActivity.txt.setText("C: Connected...");

}
else
{
Log.e("SOCKET", "Socket: Not Connected");
MainActivity.txt.setText("C:Not Connected");
}
try
{
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
/* dataOutputStream = new DataOutputStream(socket.getOutputStream()); byte[] bytes = new byte[] {1}; dataOutputStream.write(bytes, 0, bytes.length); */
Log.e("TCP Client", "C: Sent.");
MainActivity.txt.setText("C:Sent");
Log.e("TCP Client", "C: Done.");
MainActivity.txt.setText("C: Done");
if(out.checkError()) { Log.e("PrintWriter", "CheckError"); }
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (mRun)
{ serverMessage = in.readLine();
if (serverMessage != null && mMessageListener != null) {
mMessageListener.messageReceived(serverMessage); } serverMessage = null; }
Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'"); }
catch (Exception e)
{
Log.e("TCP", "S: Error", e);
MainActivity.txt.setText(e.toString());

}
finally { socket.close(); }
}

catch (Exception e) {
Log.e("TCP", "C: Error", e);
MainActivity.txt.setText("C:"+e);
}
}
};

/////
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("start", "execute");
editText = (EditText)findViewById(R.id.editText1);
send = (Button)findViewById(R.id.button1);
txt=(TextView)findViewById(R.id.textView1);
// connect to the server
// Looper.prepare();
///////
t=new Thread(con);
t.start();


////////

// new connectTask().execute("");
//Log.d("excute", "execute");
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String message = editText.getText().toString();
if (out != null && !out.checkError())
{
out.print(message);
out.flush();
}
//sends the message to the server
//if (mTcpClient != null)
// {
// mTcpClient.sendMessage(message); }
editText.setText("");
}
});


}





کدی که روی کامپوتر نوشتم نیز این است




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
//using System.Drawing;
using System.Linq;
using System.Text;
//using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.IO;


namespace ConsoleApplication5
{
class Program
{
static Socket listeningSocket;
static Socket socket;
static Thread thrReadRequest;
static int iPort = 4444;
static int iConnectionQueue = 100;

static private void getRequest()
{
int i = 0;
while (true)
{
i++;
Console.WriteLine("Outside Try i = {0}", i.ToString());
try
{
// socket = listeningSocket.Accept();
socket = listeningSocket.Accept();
byte[] a = new byte[1024];
string text_rec = "";
while (text_rec != "exit")
{
socket.Receive(a);
text_rec = Encoding.Default.GetString(a);
if(text_rec!="")
Console.WriteLine(text_rec);
}


//using reader }//using ns
// Receiving //byte[] rcvLenBytes = new byte[4];
//socket.Receive(rcvLenBytes);
//int rcvLen = System.BitConverter.ToInt32(rcvLenBytes, 0);
//byte[] rcvBytes = new byte[rcvLen];
//socket.Receive(rcvBytes);
//String formattedBuffer = System.Text.Encoding.ASCII.GetString(rcvBytes);

//byte[] buffer = new byte[socket.SendBufferSize];
//int iBufferLength = socket.Receive(buffer, 0, buffer.Length, 0);
//Console.WriteLine("Received {0}", iBufferLength);
//Array.Resize(ref buffer, iBufferLength);
//string formattedBuffer = Encoding.ASCII.GetString(buffer);
//Console.WriteLine("Data received by Client: {0}", formattedBuffer);
// socket = listeningSocket.Accept();
// using (NetworkStream nt = new NetworkStream(socket))
// {
// using (StreamReader reader = new StreamReader(nt))
// {
// string line;
// // string line;
// // while ((line = reader.ReadLine()) != null)
// //as networkstream never got eof. was using it as replacement while(true)
// // {
// while (true)
// {
// try
// {
// line = reader.ReadLine();
// if (line == "quit")
// {
// socket.Close();
// listeningSocket.Close();
// Environment.Exit(0);
// }
// Console.WriteLine("Inside Try i = {0}", i.ToString());
// Thread.Sleep(500);
// }
// catch (IOException)
// {
// break;
// }
// Console.WriteLine(line);
// }
// }
// //using reader
// }
// //using ns

}
catch (Exception e)
{
//socket.Close();
Console.WriteLine("Receiving error: " + e.ToString()); Console.ReadKey();
//throw;
}
finally
{
socket.Close();
//listeningsocket.close();
}
}
}
static private string getLocalIPAddress()
{
IPHostEntry host;
string localIP = "";
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
localIP = ip.ToString();
break;
}
}
return localIP;

}


static void Main(string[] args)
{
Console.WriteLine(IPAddress.Parse(getLocalIPAddres s()).ToString());
try
{
listeningSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listeningSocket.Bind(new IPEndPoint(0, iPort));
// listeningSocket.Bind(new IPEndPoint(IPAddress.Parse(getLocalIPAddress()), iPort));
listeningSocket.Listen(iConnectionQueue);
thrReadRequest = new Thread(new ThreadStart(getRequest));
thrReadRequest.Start();
}
catch (Exception e)
{
Console.WriteLine("Winsock error: " + e.ToString()); //throw;
}
}
}
}

rubiks.kde
چهارشنبه 25 دی 1392, 11:24 صبح
اگه از درست بودن کد مطمئن هستید چک کنید IP ها رو درست وارد کرده باشید.همچنین یک بار با غیر فعال کردن فایروال سیستم این کار رو تکرار کنید.
وگرنه هم کد رو بزارید که بشه اجرا کرد تا پی به خطا برد.

MohammadHadi2031
چهارشنبه 25 دی 1392, 15:53 عصر
کل پر115417115418115419115420وژه

darkeliden
جمعه 27 دی 1392, 11:10 صبح
به نظرم تو قسمت اول وقتی if گذاشتی کد رد میشه ، یعنی برنامه منتظر نمیمونه تا IF ها رو چک کنه و به کار خودش ادامه میده...

MohammadHadi2031
جمعه 27 دی 1392, 11:33 صبح
تو ماشین مجازی کار می کنه

mohsen22
جمعه 27 دی 1392, 17:51 عصر
خب بعد از ارتباط چه کاری انجام میده؟

MohammadHadi2031
یک شنبه 29 دی 1392, 07:39 صبح
از طرف گوشی می توان متنی برای کامپوتر فرستاد و کامپوتر نشان می دهد

rubiks.kde
پنج شنبه 03 بهمن 1392, 23:29 عصر
برنامه شما رو تست کردم و هیچ مشکلی نداشت.
اول IP ها رو درست وارد کنید و بعد firewall سیستم رو خاموش کنید.اگه آنتی ویروس دارید اون رو هم غیر فعال کنید.

hesam_a110
جمعه 04 بهمن 1392, 02:16 صبح
درود بر شما
برنامه شما بسیار بسیار خوب کار می کنه ممنون و سپاسگذار از شما MohammadHadi2031 (http://barnamenevis.org/member.php?271717-MohammadHadi2031) به خاطر به اشتراک گذاشتن کدتون و ممنونم از rubiks.kde که این تاپبک رو معرفی کردند :لبخندساده::تشویق: (http://barnamenevis.org/member.php?231180-rubiks.kde)
موردی که من تویه شبکه بهش بر حوردم اول متصل نمی شد علت این بود که من تویه شبکه Guest بودم و Isolate بود
اگه این خطا رو داشتید به ستینگ مودم یه سری بزنید شاید شبکه بر اساس هر IP ایزوله باشه :چشمک: تویه advance wireless دنباله AP isolation بگرید و ببنید که off باشه :چشمک:
پیروز باشید :چشمک:

Ardeshir_az
سه شنبه 18 شهریور 1393, 14:27 عصر
کل پر115417115418115419115420وژه

با سلام

با تشكر از كد شما ميشه راهنمايي بفرماييد اين كد ها در چه نرم افزارهايي بايستي كامپايل بشوند و با چ شرايطي؟

قبلا از شما متشكرم

tb.hamed
پنج شنبه 22 مرداد 1394, 14:05 عصر
سلام
من میخوام برنامه ای بنویسم که از طریق اندروید کیبورد کامپیوتر رو کنترل کنم.یعنی مثلا تو برنامم یه دکمه ای بزارم که هرموقع روی اون دکمه کلیک شد کلید x توی کامپیوتر زده بشه.....اگه کسی وارده لطفا کمکم کنه خیلی کارم گیره....