我有一个使用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();
}
}
}
答案 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,那么即使您的连接成功,也不会发送您的字节。
这就是我的全部 - 祝你好运!