TcpClient不在Windows 8.1上发送

时间:2015-01-05 12:23:30

标签: c# network-programming tcpclient

我有一个使用TCP连接进行通信的应用程序。 在Windows 7计算机上使用此应用程序时,它将发送数据。但是当我在Windows 8.1机器上使用相同的应用程序时,它将连接到服务器,但它不会发送数据。

我已经检查了应用程序如何连接到服务器,在Windows 7和8.1上这是相同的。

为什么会出现此问题?

以下是连接类的代码:

public class TcpCon
{
    private TcpClient tcpClient;

    public bool Connected
    {
        get 
        { 
            if(tcpClient != null)
                return tcpClient.Connected;
            return false; 
        }            
    }


    public void Connect(String ipAddr, int port)
    {
        if (tcpClient == null)
        {
            tcpClient = new TcpClient();

            tcpClient.Connect(ipAddr, port);

        }

    }

    public void Disconnect()
    {
        if (tcpClient != null)
        {
            tcpClient.Close();
        }

    }

    public void Send(Byte[] byteArr)
    {
        NetworkStream strWrite = tcpClient.GetStream();
        if (strWrite.CanWrite)
        {
            strWrite.Write(byteArr, 0, byteArr.Length);
            strWrite.Flush();
        }
    }

}

1 个答案:

答案 0 :(得分:0)

您是否检查过防火墙设置?

您是否尝试使用管理员权限升级运行它以查看是否存在权限问题?

使用WireShark,tcpmon,Fiddler等来检查连接中的问题。

尝试在发送前添加状态检查:http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.connected%28v=vs.110%29.aspx

尝试在连接中添加keepalive:

TcpClient client = ... ;
client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);

围绕代码包装异常处理程序以检查错误。

在Windows 8.1中,您是在Windows应用中运行它吗?在这种情况下,您需要申请网络许可吗?在http://msdn.microsoft.com/en-gb/library/windows/apps/hh464936.aspx

中查找网络

今晚进一步调查,您的代码在Windows 8.1上运行正常。我通过同一个专用网络在一台单独的物理计算机上从一台Windows 8.1计算机连接到另一台Windows 8.1计算机。

我能够通过以下方式复制您的无响应连接和其他故障:

1)通过防火墙 - 确保“客户端”和“服务器”上都打开了相关的防火墙设置。

2)连接错误的插座和端口。

3)托管错误的套接字或端口。

4)不向服务器发送正确的终结符(GetBytes的编码不正确)。检查您发送的数据是否格式正确,符合服务器的要求,以获得相关的确认。

唯一可以看到潜在问题的地方是:

 if (strWrite.CanWrite)
  {...}

如果返回false,那么即使您的连接成功,也不会发送您的字节。

这就是我的全部 - 祝你好运!