我尝试开发一个简单的smtp服务器,问题是当我尝试从网络读取消息时,所有消息都是一个包含大量“/ 0”而不是typed命令的字符串。我使用telnet连接到我的应用程序并输入消息。
这是我的代码:
public void StartListen()
{
SMTPParser parser = new SMTPParser();
SMTPResponder responder = new SMTPResponder();
Listening = true;
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 25);
TcpListener listener = new TcpListener(endPoint);
listener.Start();
while(Listening)
{
byte[] data = new byte[2048];
Socket socket = listener.AcceptSocket();
socket.Receive(data);
string cmd = Encoding.ASCII.GetString(data);
if(cmd !="") parser.Parse(cmd, responder);
}
}
答案 0 :(得分:1)
Socket.Receive
返回读取字节数。目前,即使只读取了几个字节,您总是从缓冲区的2048个字节中获取一个字符串。改为:
int length = socket.Receive(data);
string cmd = Encoding.ASCII.GetString(data, 0, length);