TcpClient 未在 Windows 8.1 上发送

本文关键字:未在 Windows TcpClient | 更新日期: 2023-09-27 18:36:10

我有一个使用 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();
        }
    }
}

TcpClient 未在 Windows 8.1 上发送

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

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

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

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

尝试将保持连接添加到连接:

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,则即使您的连接成功,也不会发送您的字节。

这就是我所拥有的——祝你好运!