View Full Version : خطای connection time out
malihehshajari
شنبه 28 مرداد 1391, 13:53 عصر
سلام
من یک برنامه client/server دارم که کلاینت روی تبلت ( اندروید) اجرا میشه و سرور روی کامپیوتر (سی شارپ)
وقتی برنامه کلاینت رو اجرا میکنم خطای connection time out میده
در صورتیکه این برنامه تو امولاتور بدون مشکل اجرا میشه
کسی میدونه مشکلم چیه؟
aram_2
شنبه 28 مرداد 1391, 14:40 عصر
کد مربوط به اتصالات کلاینت و سرور رو بذارید ببینم.در ضمن آدرس ها رو چطور دادید؟اونم قید کنید.
malihehshajari
سه شنبه 31 مرداد 1391, 09:02 صبح
کد مربوط به کلاینت ( اندروید) :
package tcp.test1;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import android.util.Log;
public class TCPClient implements Runnable {
public static String e6="",e7="",e8="",e9="";
public void run() {
e6="";
e7="";
e8="";
try {
InetAddress serverAddr = InetAddress.getByName(Tcp_test1Activity.IPClient);// Ip of my desktop.
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, 1001);
socket.setSoTimeout(5000);
String message = Tcp_test1Activity.msg ;
e6= "C: Connecting...";
try {
Log.d("TCP", "C: Sending: '" + message + "'");
e8="C: Sending: '" + message + "'";
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true );
int length = message.length();
synchronized(out) {
out.write((length >> 24) & 0xFF);
out.write((length >> 16) & 0xFF);
out.write((length >> 8) & 0xFF);
out.write(length & 0xFF);
out.write(message);
out.flush();
}
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
e7="C: Sent.";
} catch(Exception e) {
Log.e("TCP", "S: Error", e);
e7=e.toString();
} finally {
socket.close();
}
} catch (Exception e) {
Log.e("TCP", "C: Error", e);
e6=e.toString();
}
}
}
کد مربوط به سرور (سی شارپ)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
namespace server
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Socket connection;
Thread readThread;
NetworkStream socketStream;
BinaryReader reader;
public void RunServer()
{
TcpListener listener;
int counter = 1;
try
{
listener = new TcpListener(1001);
listener.Start();
while (true)
{
MessageBox.Show("Waiting for connection","server");
connection = listener.AcceptSocket();
socketStream = new NetworkStream(connection);
MessageBox.Show("Connection " + counter + " received", "server");
reader = new BinaryReader(socketStream);
string theReply = "";
int len = 0;
byte[] ch = new byte[4];
do
{
try
{
ch[0] = Convert.ToByte(reader.ReadChar());
ch[1] = Convert.ToByte(reader.ReadChar());
ch[2] = Convert.ToByte(reader.ReadChar());
ch[3] = Convert.ToByte(reader.ReadChar());
if (BitConverter.IsLittleEndian)
Array.Reverse(ch);
len = BitConverter.ToInt32(ch, 0);
for (int i = 0; i < len; i++)
{
theReply += reader.ReadChar().ToString();
}
MessageBox.Show(theReply + "Get Data", "server");
System.IO.StreamWriter Wr13 = new System.IO.StreamWriter("D:\\a.txt", false, System.Text.Encoding.UTF8);
Wr13.Write(theReply);
Wr13.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} while (false);
MessageBox.Show("User terminated connection", "server");
reader.Close();
socketStream.Close();
connection.Close();
++counter;
}
}
catch (Exception error)
{
MessageBox.Show(error.ToString(), "server");
}
}
int flag = 0;
private void button1_Click(object sender, EventArgs e)
{
if (flag == 0)
{
readThread = new Thread(new ThreadStart(RunServer));
readThread.Start();
flag = 1;
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
readThread.Abort();
}
catch
{
}
Application.ExitThread();
Application.Exit();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
aram_2
سه شنبه 31 مرداد 1391, 09:31 صبح
تا اونجا که من فهمیدم مشکل از اتصال کلاینت به سروره.آدرس آی پی رو درسته بدست میاره؟قبل از اتصال به سرور، تریس کنید ببیند آدرس سرور رو چی میده بهتون. شماره پورت رو هم مثلا بذارید 2200.ببینید مشکل رفع میشه.
aram_2
سه شنبه 31 مرداد 1391, 09:38 صبح
مشکل از آی پی هاست.همونطور که گفتم راه حلش استفاده از یه واسط هست.به لینک زیر سر بزنید:
مشاهده (http://www.ape-project.org/)
malihehshajari
سه شنبه 31 مرداد 1391, 10:04 صبح
پس چرا وقتی تو امولاتور اجرا میکنم خطا نمیده
یا وقتی 127.0.0.1 رو میزنم اجرا میشه
از طرفی من از داخل امولاتور میتونم به تبلت پیغام بفرستم این یعنی ارتباطم برقراره مگه نه ؟
aram_2
سه شنبه 31 مرداد 1391, 10:10 صبح
چون تو امولاتور آی پی شما ایستاس! شما می خوای بین دو شبکه ارتباط برقرار کنی بایستی این ارتباط توسط پل صورت بگیره.یعنی یه پل (bridge) بین دو شبکه باید بزنید که راه حلش همون چیزی که بالا گفتم.
Mask
سه شنبه 31 مرداد 1391, 13:31 عصر
یا اینترنتتون رو از پشت nat در بیارید یا از آی پی استاتیک استفاده کنید.
malihehshajari
چهارشنبه 01 شهریور 1391, 10:29 صبح
یا اینترنتتون رو از پشت nat در بیارید یا از آی پی استاتیک استفاده کنید.
من اصلا از nat استفاده نمی کنم
با آی پی استاتیک هم همون خطا رو میده
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.