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模型中,完成端口效率最高