sds1920
چهارشنبه 30 مهر 1393, 13:06 عصر
سلام به همه.
دقیقا نمی دونستم این سوالو اینجا مطرح کنم یا توی قسمت اندروید.چون به هر دوش مربوط هست.
من یه برنامه با سوکت دارم می نویسم که سرور اون سی شارپ هست و کلاینت اون اندروید.همه کار ها درست انجام میشه تا وقتی که بخوام سوکت رو از طرف اندروید close کنم.
وقتی که سوکت رو close می کنم توی سرور نشونه ای مبنی بر اینکه سوکت بسته شده وجود نداره و از زمان بسته شدن سوکت در اندروید سرور پشت سر هم شروع می کنه به دریافت اطلاعات ولی تعداد بایتهایی که دریافت می کنه صفر هست.به نظر شما من از کجا باید بفهمم که کلاینتم کانکشن خودشو close کرده.
من نمونه کد هام رو در زیر قرار می دم از دوستان هرکس که میتونه کمک کنه.
نمونه کد های سرور در C#
class Program
{
private static int port = 4444;
private static Socket mainSocket;
private static Socket clientSocket;
static void Main(string[] args)
{
StartListen();
ConsoleKeyInfo key;
do
{ key = Console.ReadKey(true); }
while (key.KeyChar != 'e' && key.KeyChar != 'c');
}
private static void StartListen()
{
IPAddress serverIp = new IPAddress(new byte[] { 192, 168, 1, 100 });
IPEndPoint ipEndPoint = new IPEndPoint(serverIp, port);
EndPoint endPoint = ipEndPoint.Create(ipEndPoint.Serialize());
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try { mainSocket.Bind(endPoint); }
catch (Exception ex)
{
Console.WriteLine("Error in Binding Socket");
}
try
{
mainSocket.Listen(10);
string strIp = string.Empty;
Console.WriteLine("Listening On " + serverIp + ":" + port);
Console.WriteLine();
}
catch (Exception ex)
{
Console.WriteLine("Error in Start Listening");
}
new Thread(AcceptRequeste).Start();
}
private static void AcceptRequeste()
{
try
{
while (true)
{
clientSocket = mainSocket.Accept();
new Thread(ReceiveData).Start();
Console.WriteLine("Client Connected");
}
}
catch { }
}
private static void ReceiveData()
{
while (clientSocket.Connected)
try
{
byte[] buffer=new byte[10];
clientSocket.Receive(buffer);
foreach (byte b in buffer)
Console.WriteLine(b);
}
catch
{
}
}
}
نمونه کد های کلاینت در اندروید:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread thr = new Thread(createSocket);
thr.start();
}
Runnable createSocket = new Runnable()
{
@Override
public void run()
{
try
{
addr = InetAddress.getByName("192.168.1.100");
socket = new Socket(addr, 4444);
socketReceiver = socket.getInputStream();
socketSender = socket.getOutputStream();
new Thread(dataReceived).start();
} catch (Exception e)
{
}
}
};
Runnable dataReceived = new Runnable()
{
@Override
public void run()
{
while (socket.isConnected() && !socket.isClosed())
try
{
byte[] bts = new byte[10];
socketReceiver.read(bts);
} catch (Exception e)
{
}
}
};
public void btnClose_Click(View v)
{
try
{
socket.close();
} catch (Exception e)
{
}
}
زمانی که برنامه سمت کلاینت رو می بندم سرور مثل عکس زیر می شه:
124825
دقیقا نمی دونستم این سوالو اینجا مطرح کنم یا توی قسمت اندروید.چون به هر دوش مربوط هست.
من یه برنامه با سوکت دارم می نویسم که سرور اون سی شارپ هست و کلاینت اون اندروید.همه کار ها درست انجام میشه تا وقتی که بخوام سوکت رو از طرف اندروید close کنم.
وقتی که سوکت رو close می کنم توی سرور نشونه ای مبنی بر اینکه سوکت بسته شده وجود نداره و از زمان بسته شدن سوکت در اندروید سرور پشت سر هم شروع می کنه به دریافت اطلاعات ولی تعداد بایتهایی که دریافت می کنه صفر هست.به نظر شما من از کجا باید بفهمم که کلاینتم کانکشن خودشو close کرده.
من نمونه کد هام رو در زیر قرار می دم از دوستان هرکس که میتونه کمک کنه.
نمونه کد های سرور در C#
class Program
{
private static int port = 4444;
private static Socket mainSocket;
private static Socket clientSocket;
static void Main(string[] args)
{
StartListen();
ConsoleKeyInfo key;
do
{ key = Console.ReadKey(true); }
while (key.KeyChar != 'e' && key.KeyChar != 'c');
}
private static void StartListen()
{
IPAddress serverIp = new IPAddress(new byte[] { 192, 168, 1, 100 });
IPEndPoint ipEndPoint = new IPEndPoint(serverIp, port);
EndPoint endPoint = ipEndPoint.Create(ipEndPoint.Serialize());
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try { mainSocket.Bind(endPoint); }
catch (Exception ex)
{
Console.WriteLine("Error in Binding Socket");
}
try
{
mainSocket.Listen(10);
string strIp = string.Empty;
Console.WriteLine("Listening On " + serverIp + ":" + port);
Console.WriteLine();
}
catch (Exception ex)
{
Console.WriteLine("Error in Start Listening");
}
new Thread(AcceptRequeste).Start();
}
private static void AcceptRequeste()
{
try
{
while (true)
{
clientSocket = mainSocket.Accept();
new Thread(ReceiveData).Start();
Console.WriteLine("Client Connected");
}
}
catch { }
}
private static void ReceiveData()
{
while (clientSocket.Connected)
try
{
byte[] buffer=new byte[10];
clientSocket.Receive(buffer);
foreach (byte b in buffer)
Console.WriteLine(b);
}
catch
{
}
}
}
نمونه کد های کلاینت در اندروید:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread thr = new Thread(createSocket);
thr.start();
}
Runnable createSocket = new Runnable()
{
@Override
public void run()
{
try
{
addr = InetAddress.getByName("192.168.1.100");
socket = new Socket(addr, 4444);
socketReceiver = socket.getInputStream();
socketSender = socket.getOutputStream();
new Thread(dataReceived).start();
} catch (Exception e)
{
}
}
};
Runnable dataReceived = new Runnable()
{
@Override
public void run()
{
while (socket.isConnected() && !socket.isClosed())
try
{
byte[] bts = new byte[10];
socketReceiver.read(bts);
} catch (Exception e)
{
}
}
};
public void btnClose_Click(View v)
{
try
{
socket.close();
} catch (Exception e)
{
}
}
زمانی که برنامه سمت کلاینت رو می بندم سرور مثل عکس زیر می شه:
124825