C# TCP客户端未在Windows 8.1上发送
我有一个使用TCP连接进行通信的应用程序。 在Windows 7计算机上使用此应用程序时,它将发送数据。但当我在Windows8.1机器上使用相同的应用程序时,它将连接到服务器,但不会发送数据 我已经检查了应用程序如何连接到服务器,在Windows7和8.1上,这是相同的 你知道为什么会出现这个问题吗 以下是连接类的代码:C# TCP客户端未在Windows 8.1上发送,c#,network-programming,tcpclient,C#,Network Programming,Tcpclient,我有一个使用TCP连接进行通信的应用程序。 在Windows 7计算机上使用此应用程序时,它将发送数据。但当我在Windows8.1机器上使用相同的应用程序时,它将连接到服务器,但不会发送数据 我已经检查了应用程序如何连接到服务器,在Windows7和8.1上,这是相同的 你知道为什么会出现这个问题吗 以下是连接类的代码: public class TcpCon { private TcpClient tcpClient; public bool Connected {
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等检查连接中的问题 发送之前,请尝试在连接上添加状态检查: 尝试将keepalive添加到您的连接:
TcpClient client = ... ;
client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
在代码周围包装一个异常处理程序以检查错误
在Windows 8.1中,您是否在Windows应用程序中运行它?在这种情况下,您需要请求网络许可吗?在以下位置查找网络:
今晚进行进一步调查,您的代码在Windows 8.1上运行良好。我通过同一个专用网络从一台Windows 8.1计算机连接到另一台Windows 8.1计算机上的另一台物理计算机
我可以通过以下方式复制您的无响应连接和其他故障:
1通过防火墙-确保客户端和服务器上的相关防火墙设置均已打开
2连接到错误的插座和端口
3主机在错误的插座或端口上
4未向服务器发送正确的终止符GetBytes的编码不正确。检查您发送的数据是否按照服务器的要求正确格式化,以获得相关确认
我唯一能看到潜在问题的地方是:
if (strWrite.CanWrite)
{...}
如果返回false,则即使连接成功,也不会发送字节
这就是我所拥有的一切——祝你好运 已为此问题关闭防火墙。该应用程序具有管理员权限,而不是Windows应用程序。我已使用Wireshark进行了查看。在那里,我看到连接已建立。只有必须发送的数据才会显示。在我的Win7机器上是的。我正在使用IP地址。通过putty可以到达服务器。然后发送数据。所以我希望它是与Win8上的.NET有关。在今晚进一步调查后,答案更新了。祝你好运谢谢你的意见。今天我尝试连接到另一个端口。效果很好。问题在于端口8080。只有在这个端口上我才遇到这个问题。你甚至没有包含任何实际尝试发送任何东西的代码,更不用说你提供了一个完整的代码示例,用于网络问题的代码示例需要同时包含服务器和客户端。有关详细信息,请参见,包括仍然完整的简明、最少的代码示例的重要性。考虑到目前为止的信息,您的具体问题的底线是:如果您可以成功连接,但存在其他问题,那么几乎可以肯定您在客户端或服务器中存在错误。缺少代码,没有人能指出错误。