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

本文关键字:连接 问题 SocketException 之间 Android PC | 更新日期: 2023-09-27 18:18:09

当我尝试从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)
        {
        }
    }
有谁能帮我解决这个问题吗?谢谢。

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

根据评论,有两件事你应该注意。首先,您使用公共地址从本地网络联系本地网络中的设备。我不确定所有的路由器都能正确地做到这一点,但是如果你想要公共访问,你需要转发8867端口。试试吧,也许会有帮助。

在这里搜索你的路由器,你会发现如何做到这一点的解释:http://portforward.com/

在转发后从网络外访问手机时,手机肯定是可用的。当然,你的电话应该总是有相同的本地地址。在路由器设置中保留或在手机上手动设置。

出于测试目的,请尝试在PC上使用手机的本地IP地址。