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();
}
}
}
您是否检查过防火墙设置?
您是否尝试过使用管理员权限提升运行它以查看是否存在权限问题?
使用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,则即使您的连接成功,也不会发送您的字节。
这就是我所拥有的——祝你好运!