PC和Android设备之间的连接问题 - SocketException

时间:2013-06-11 22:09:45

标签: c# android client-server serversocket

当我尝试从PC连接到Android设备时,我发现了一个套接字异常“无法建立连接,因为目标计算机主动拒绝它”。 android设备上的服务器代码:

private void networkOperations()
{
    Thread networkThread = new Thread (null, doBackgroundThreadProcessing, "Network");
    networkThread.start();
}

private Runnable doBackgroundThreadProcessing = new Runnable() 
{
    public void run() {
        backgroundThreadProcessing();
    }
};

private void backgroundThreadProcessing()
{
    Socket s = null;
    ServerSocket ss = null;
    try {
        ss = new ServerSocket(8867);
    } catch (IOException e) {
        e.printStackTrace();
    }
    while(!Thread.currentThread().isInterrupted())
    {
        try {
            if (s == null)
                s = ss.accept();
            BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String st = null;
            st = input.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

networkOperations()正在调用Main Activity的onCreate()方法。 PC上的客户代码(C#):

class Connection
{
    public Connection(String ip, String port)
    {
        Ip = IPAddress.Parse(ip);
        Port = Convert.ToInt32(port);
    }

    public IPAddress Ip
    {
        get;
        set;
    }

    public Int32 Port
    {
        get;
        set;
    }

    public Boolean ConnectionError;

    public Socket S;

    public void ConnectToServer()
    {
        IPEndPoint ipe = new IPEndPoint(Ip, Port);
        S = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
        try
        {
            S.Connect(ipe);
        }
        catch (SocketException e)
        {
        }
    }

有人可以帮我解决这个问题吗?感谢。

1 个答案:

答案 0 :(得分:0)

根据评论,您应该注意两件事。首先,您使用公共地址从本地网络联系本地网络中的设备。我不确定所有路由器都能正确执行此操作,但是如果您想要公共访问,则需要转发8867端口。试试吧,它可能会有所帮助。

在此处搜索您的路由器,您将找到解释如何执行此操作: http://portforward.com/

转发后,当从网络外部访问手机时,手机肯定可用。当然,您的手机应始终具有相同的本地地址。在路由器设置中保留它或在手机上手动设置它。

出于测试目的,请尝试使用PC上的电话本地IP地址。