为什么本地计算机上的端口之间的TCP通信不能在不同的Windows操作系统上运行?

时间:2017-01-10 01:07:50

标签: c# tcp tcplistener

我写了一个与TcpListener和TcpClients通信的程序。程序可以是接收者或发送者。接收者使用TcpListener&tcpClient的顺序与发送者的顺序类似。

在我编写代码的Windows 10机器上,代码工作正常,但在Windows 7机器上,代码不起作用。

我从发件人那里收到以下错误:无法建立连接,因为目标机器主动拒绝它127.0.0.1:8000。

那么这个问题的原因是什么?是否与计算机的速度有关,因为W10机器有i7而W7有较旧的i5?

这是发件人代码:

private final static int BUFFER_SIZE = 1024;

public static void writeXML(JCoFunction jcoFunction, String path) {
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;

    try {
        bis = new BufferedInputStream(new FileInputStream(new File("C:/XMLFile.xml")));
        bos = new BufferedOutputStream(new FileOutputStream(path));

        byte[] buf = new byte[BUFFER_SIZE];
        int len = 0;
        while((len = bis.read(buf)) >= 0) {
            bos.write(buf, 0, len);
        }

    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e2) {
        e2.printStackTrace();
    } finally {
        try {
            if(bis != null) bis.close();
            if(bos != null) bos.close();
        } catch (Exception e) {}
    }
}

3 个答案:

答案 0 :(得分:0)

*编辑刚刚注意到您在TIMED_WAIT上方的评论表明正在使用该端口。

它将是: A,Windows防火墙,转到防御者并关闭它以测试它是否有效,如果可以的话,你可以添加一个例外并重新打开它。 B,端口正在使用中。

快速搜索显示使用:

curl 'https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXX123456789/Calls.json' -X POST \
--data-urlencode 'To=+1562300000' \
--data-urlencode 'From=+18180000000' \
--data-urlencode 'MachineDetection=Enable' \
--data-urlencode 'Url=https://handler.twilio.com/twiml/EH8ccdbd7f0b8fe34357da8ce87ebe5a16' \
-u ACXXXXXXXXXXXXXXXX123456789:[AuthToken]

将在localhost上使用防火墙(Atleast用于测试目的),您正在打开您的计算机,因此可以理解您必须明确告诉您的防火墙您想要打开您的网络!

答案 1 :(得分:0)

端口8000很可能被另一个程序使用。特别是如果它在一台计算机上工作但主动拒绝另一台计算机(一台计算机可能安装了另一台计算机没有安装的程序)。尝试另一个端口(例如25568)

答案 2 :(得分:0)

我对C#一无所知,但我怀疑它与您的计算机硬件有关。 我会检查以下两件事:

  1. 您的Windows 7计算机上是否已运行任何程序并侦听端口8000?可以是网络服务器,游戏,任何第三方软件。或者甚至已经运行的程序的旧版本。尝试重新启动计算机并再次检查。

  2. Windows机器上是否运行了防火墙?可能是Windows防火墙或防病毒程序安装的防火墙。