聊天室客户端\服务器的编写,已经可以发送字符串,现在想发文件。
比如客户端,Connect上服务器后开启线程用于解析服务器的相应命令如
private void ServerResponse()//线程体
{
byte[] buff = new byte[maxBuff];
string msg;
int len;
if (!Stream.CanRead)
{
return;
}
while (connectedFlag)
{
len = Stream.Read(buff, 0, buff.Length);
if (len < 1)
{
Thread.Sleep(200);
continue;
} msg = System.Text.Encoding.Default.GetString(buff, 0, len);
msg.Trim(); tokens = msg.Split(new Char[] { '|' });
if (tokens[0] == "CONNO")
{
//登陆成功
}
else if(tokens[1]=="CONNE")
{
//登陆失败
}
else if(...)
{
...
}
现在想想发送文件应该怎么写?
我试着把服务器的发送文件写成这样
private void SendFile(string filename)
{
FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
Send("FILE|" + filename);
byte[] bb = new byte[maxBuff];
int i;
while ((i = fileStream.Read(bb, 0, bb.Length)) != 0)
{
Stream.Write(bb, 0, i);
}
fileStream.Close();
}客户端添加 else if(token[0]=="FILE")
{
fileStream = new FileStream(tokens[1], FileMode.Create, FileAccess.Write);
Thread recFileThread = new Thread(new ThreadStart(ReceiveFile));
recFileThread.Start();
}
private void ReceiveFile()
{
byte[] bytes = new byte[maxBuff];
int i;
NetworkStream fstream = tcpClient.GetStream();
while ((i = fstream.Read(bytes, 0, bytes.Length)) > 0)
{
fileStream.Write(bytes, 0, i);
}
fileStream.Close();
fstream.Close();
}这样写是错的,就是不清楚应该在那里把命令和文件分开。不要意思分数不多,还是希望大家多多帮助!
比如客户端,Connect上服务器后开启线程用于解析服务器的相应命令如
private void ServerResponse()//线程体
{
byte[] buff = new byte[maxBuff];
string msg;
int len;
if (!Stream.CanRead)
{
return;
}
while (connectedFlag)
{
len = Stream.Read(buff, 0, buff.Length);
if (len < 1)
{
Thread.Sleep(200);
continue;
} msg = System.Text.Encoding.Default.GetString(buff, 0, len);
msg.Trim(); tokens = msg.Split(new Char[] { '|' });
if (tokens[0] == "CONNO")
{
//登陆成功
}
else if(tokens[1]=="CONNE")
{
//登陆失败
}
else if(...)
{
...
}
现在想想发送文件应该怎么写?
我试着把服务器的发送文件写成这样
private void SendFile(string filename)
{
FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
Send("FILE|" + filename);
byte[] bb = new byte[maxBuff];
int i;
while ((i = fileStream.Read(bb, 0, bb.Length)) != 0)
{
Stream.Write(bb, 0, i);
}
fileStream.Close();
}客户端添加 else if(token[0]=="FILE")
{
fileStream = new FileStream(tokens[1], FileMode.Create, FileAccess.Write);
Thread recFileThread = new Thread(new ThreadStart(ReceiveFile));
recFileThread.Start();
}
private void ReceiveFile()
{
byte[] bytes = new byte[maxBuff];
int i;
NetworkStream fstream = tcpClient.GetStream();
while ((i = fstream.Read(bytes, 0, bytes.Length)) > 0)
{
fileStream.Write(bytes, 0, i);
}
fileStream.Close();
fstream.Close();
}这样写是错的,就是不清楚应该在那里把命令和文件分开。不要意思分数不多,还是希望大家多多帮助!
{
}
能不能在这个里面完成程序的接收功能,这样其他程序就不用做什么修改。
实在不行,从头改也行,希望能得到大家宝贵的意见