Socket如何能实现一次建立连接,多次发送数据?

雄牛 2017-05-02 11:29:23
每次都要建立一个New TcpClient(),数据量不大的时候还没问题,
但大数据量就会有问题,如何改才能反复调用tcpClient?



//单一IP模式
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(IPAddress.Parse(pub.strRemote), Convert.ToInt32(pub.strPort));

NetworkStream ntwStream = tcpClient.GetStream();
if (ntwStream.CanWrite)
{
Byte[] bytSend = Encoding.UTF8.GetBytes(SendText.Text);
ntwStream.Write(bytSend, 0, bytSend.Length);
ClientText.Text += "Client sender > [" + DateTime.Now.ToString() + "]:" + SendText.Text + "\r\n";
}
else
{
MessageBox.Show("Cannot write data!");
ntwStream.Close();
tcpClient.Close();

return;
}
ntwStream.Close();
tcpClient.Close();
...全文
2220 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
雄牛 2017-07-17
  • 打赏
  • 举报
回复
引用 10 楼 Allensna 的回复:
楼主 解决了么 告诉我们一下啊
建立多个管道,用多线程管理,每个连接一个管道就行了...
Allensna 2017-07-05
  • 打赏
  • 举报
回复
楼主 解决了么 告诉我们一下啊
xian_wwq 2017-05-04
  • 打赏
  • 举报
回复
可以参考这个 http://download.csdn.net/detail/xian_wwq/9636584
zhujinqiang 2017-05-04
  • 打赏
  • 举报
回复
ntwStream.Close();
tcpClient.Close();
每次都close了,要用自然只能是再new一个 如楼上所述,设置一个全局的变量来保存tcpclient的实例
tanta 2017-05-04
  • 打赏
  • 举报
回复
TCP建立连接是比较耗费资源的,你首先要分析你数据发送的频次和数据包的大小,还要考虑到时延要求等等,根据需要来确定采取何种通信方式。如果频次较高,有可靠性要求那要采取长连接,可靠性不高,可考虑udp。。。等等。
凡凡1990 2017-05-04
  • 打赏
  • 举报
回复
用一个全局变量比如 socketA保存这个连接 socketA.send()... socketA.send()... socketA.send()...
xian_wwq 2017-05-03
  • 打赏
  • 举报
回复
把TcpClient作为全局变量 首次使用时,进行初始化, 连接成功后,只要socket没有异常, 就可以直接调用来收发数据了
雄牛 2017-05-03
  • 打赏
  • 举报
回复
引用 4 楼 xian_wwq 的回复:
把TcpClient作为全局变量 首次使用时,进行初始化, 连接成功后,只要socket没有异常, 就可以直接调用来收发数据了
我想动态创建tcpclient,因为连的有很多个同时,我想存到一个list对象里, 下一次发送指令时,把这个对象找出来发过去 有没什么参考的资料和方法呢/
雄牛 2017-05-02
  • 打赏
  • 举报
回复
引用 1 楼 diaodiaop 的回复:
其实你的理解有问题. tcpclient本来就是为了"长连接"而存在的. 比如 你设置全局的tcpclient 不就行了吗? 而且你要清楚你自己的需求.. 如果你仅仅是要"多次给服务器上传数据" 那么你根本不应该采用tcpclient. httpclient才是最适合你的..
是做在公共CS文件里的, 之前试过没产生数据过去 我再试试
  • 打赏
  • 举报
回复
把后面的Close去掉就可以了。你每次都把连接关闭了,当然无法继续发送数据了。只要没有关闭,下次发送数据的时候可以继续这个stream和tcpClient。建议你保存成全局变量,方便下次使用。
by_封爱 版主 2017-05-02
  • 打赏
  • 举报
回复
其实你的理解有问题. tcpclient本来就是为了"长连接"而存在的. 比如 你设置全局的tcpclient 不就行了吗? 而且你要清楚你自己的需求.. 如果你仅仅是要"多次给服务器上传数据" 那么你根本不应该采用tcpclient. httpclient才是最适合你的..

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧