【发布时间】:2011-12-19 05:16:30
【问题描述】:
我正在尝试使用 TCPSocket 创建与文件传输应用程序的聊天,这是我的代码..
发件人:
public void sendData(string message)
{
StreamWriter streamWriter = new StreamWriter(netStream); // netStream is
// connected
streamWriter.WriteLine(message);
streamWriter.WriteLine(message);
logs.Add(string.Format("Message Sent! :{0}", message));
//netStream.Flush();
streamWriter.Flush();
}
接收者:
private void ReceiveData()
{
StreamReader streamReader = new StreamReader(ChatNetStream);
StringBuilder dataAppends = new StringBuilder();
bool doneTransfer = false;
string data;
while (!doneTransfer)
{
while ((data = streamReader.ReadLine()) != null)
{
dataAppends.Append(data);
}
doneTransfer = true;
//ChatNetStream.Close();
//streamReader
}
//do whatever i want with dataAppends.ToString() here..
ReceiveData()
}
问题是我总是在这个语句中变成无限循环
while ((data = streamReader.ReadLine()) != null)
{
dataAppends.Append(data);
}
即使我将 streamWriter.Flush() 放在我的发件人上..
我需要关闭/处置 netStream/NetworkStream 吗?
无论如何,我可以只使用 1 个套接字或连接来发送文件并同时发送聊天..吗?还是我每次发送文件时都需要使用新的套接字连接..
【问题讨论】:
-
您应该使用 2 个套接字,如果您发送一个大文件,它将阻止聊天,除非您在每个数据包上提供一个标头来检测它是对话还是文件的另一部分。
标签: c# network-programming tcpclient