我想new一个Clent对象以后,让client一直保持连接。但是finally里ns.Close()以后,client就自己关闭了。
请问如何保证TcpClient的连接不关闭?
public class Client
{
private TcpClient client = new TcpClient();
client.Connect("Ip地址", "端口"); public void Post(byte[] b)
{
NetworkStream ns = null;
try
{
ns = client.GetStream();
//发送至服务器端
ns.Write(b, 0, b.Length);
ns.Flush();
}
catch
{
}
finally
{
if (ns != null)
{
ns.Close();
ns.Dispose();
}
}
}
}
请问如何保证TcpClient的连接不关闭?
public class Client
{
private TcpClient client = new TcpClient();
client.Connect("Ip地址", "端口"); public void Post(byte[] b)
{
NetworkStream ns = null;
try
{
ns = client.GetStream();
//发送至服务器端
ns.Write(b, 0, b.Length);
ns.Flush();
}
catch
{
}
finally
{
if (ns != null)
{
ns.Close();
ns.Dispose();
}
}
}
}
解决方案 »
- 联合语句
- 请教两个问题,一个是如何给自定义控件加集合属性,还有个是错误.
- datagrid 数据显示
- 如何把并行的任务队列、阻塞,以同步的方式得到结果?
- 我在桌面上画了一个方框,怎样让这个方框跟随鼠标移动?
- 用C#调用C开发一个API,出现一个分配地址空间的的问题。20分(多帮忙)
- 求助——help,如何更新cookie啊
- 关于线程同步的问题,求解
- 100分跪求高手json转xml(xml结构有要求)
- 怎样实现没有标题栏,又能改变大小的窗口?
- 小弟是新手 ,希望各位栽培 。想请教各位达人关于xml和girdview的问题 。麻烦告诉不要吝惜赐教 。感谢感谢。
- 请教 如何获取update 语句 的 数据库列 和参数
你调用client.Connected 是不是false。
所以,如果在finally里写这个ns.close(),一定就释放了connection,
我最后改成
ns = null;来替代你的close和disposed。你应该在最后释放,ns和connection,而不是每次调用Post都释放。
你可以试一下。
{
TcpClient tcpClient = new TcpClient();
IPAddress ipAddress = Dns.GetHostEntry("www.goldenstandard.com.cn").AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 80); tcpClient.Connect(ipEndPoint); byte[] c = { 1 };
for (int i = 0; i < 900; i++)
{
Post(c, tcpClient);
}
} public void Post(byte[] b,TcpClient client)
{
NetworkStream ns = null;
try
{
ns = client.GetStream();
//发送至服务器端
ns.Write(b, 0, b.Length);
ns.Flush();
}
catch
{
}
finally
{
if (ns != null)
{
string s2 = client.Connected.ToString();
ns = null;
//ns.Close();
//ns.Dispose();
string s = client.Connected.ToString();
}
}
}
试着在两台pc上先测试一下
如果你上面是正确的话,那有可能是我服务器端接收出问题了。
谢谢。