我有以下程序以XML的形式接收套接字流并将它们插入到SQL数据库中。我的问题如下: - 在调试模式下启动程序时,所有xml流都会成功插入数据库。 - 当它正常启动时(没有调试模式),程序将插入一个xml流而错过另一个(因此,如果我有20个流,则只插入10个流)。
此代码中的错误是什么?
client = Listener.AcceptTcpClient();
netstream = client.GetStream();
Status = "Connected to a client\n";
byte[] bytes = new byte[client.ReceiveBufferSize + 1];
netstream.Read(bytes, 0, Convert.ToInt32(client.ReceiveBufferSize));
// Return the data received from the client
string clientdata = System.Text.Encoding.ASCII.GetString(bytes);
Status="Client sent: " + clientdata ;
StorePolicy(clientdata);
Query = clientdata;
Query = Query.Replace("\0", "");
StorePolicy(Query);
Status="Received Query: " + Query;
StorePolicy("Received Query: " + Query);
netstream.Close();
client.Close();
///////////////insert into database/////////
try
{
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand Cmd = new SqlCommand();
string[] words = Query.Split(new[] { "</RECORD>" }, StringSplitOptions.None);
StorePolicy(Query);
foreach (string word in words)
{
if (!string.IsNullOrEmpty(word))
{
record = word.Replace("'", "''") + "</RECORD>";
StorePolicy(record);
StrQuery = "INSERT INTO SMSListenner(XMLText) VALUES ('" + record.Replace("'", "''") + "')";
Cmd = new SqlCommand(StrQuery, conn);
conn.Open();
Cmd.ExecuteReader();
conn.Close();
StorePolicy(StrQuery);
}
}
}
答案 0 :(得分:1)
MSDN明确表示:
TcpListener类提供了侦听和的简单方法 接受阻塞同步模式下的传入连接请求 。
这意味着一旦连接了一个客户端,它就会阻止所有其他客户端,直到您的“穷人Web服务器”完成流。在队列中等待的其他客户端可能会在平均时间内超时。请注意自己在处理请求时遇到了很多问题。这意味着您将在相当长的时间内阻止其他客户端。
此外,您没有异常处理,因此一个客户端可以终止您的整个“服务器”。
我的建议是,如果不是学生学习套接字如何工作的项目,请使用适当的Web服务器,并在连接之间进行隔离,并且能够同时处理多个连接。