日期:2014-05-19  浏览次数:20946 次

TcpListener+TcpClient的传送效率问题
我写了这么两个函数来实现一个简单的点对点聊天,但是发现发出信息后要等很长时间才能收到。同样的网络环境,用socket.send和socket.receive来实现同样的功能则速度很快。求高手给出解释。


以下是我实现功能的自己写的类,可以拿去试试,速度很慢
using   System;
using   System.Net.Sockets;
using   System.IO;

namespace   p2pbase
{
///   <summary>
///   Class1   的摘要说明。
///   </summary>
public   class   P2P
{

private   Socket   socket   =   new   Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
                private   TcpListener   tcpl;

public   P2P()
{
}
public   void   listen(int   port)//开始监听
{
tcpl   =   new   TcpListener(port); 
                                               tcpl.Start();  
}
public   string   Accept()//接受信息
{
Socket   s   =   tcpl.AcceptSocket();
Byte[]   stream   =   new   Byte[80];
int   i=s.Receive(stream)   ;
string   message   =   System.Text.Encoding.UTF8.GetString(stream,0,i);

return   (message);
}
public   void   Send(string   ip,int   port,string   msg)//发送信息
{

      TcpClient   tcpc   =   new   TcpClient(ip,port);
      NetworkStream   tcpStream   =   tcpc.GetStream();  
StreamWriter   reqStreamW   =   new   StreamWriter(tcpStream);
reqStreamW.Write(msg);
reqStreamW.Flush();
tcpStream.Close();
tcpc.Close();
}
public   void   Stop()//结束监听
{
tcpl.Stop();
}
}
}

------解决方案--------------------
up
------解决方案--------------------
TcpClient的效率是比Socket要低,主要是因为TCPCLient是在Socket上又封装了一层。而且使用了流这么一个东西!所以会比较慢!
------解决方案--------------------
越是底层的越快。
------解决方案--------------------
tcp模型中,完成端口效率最高