socket发送文件,服务器端如何得到所发送文件的文件名?
//////客户端发送文件
//******首先得到服务器的IP端点部分
string strIP = this.textBox1.Text;
string strPort = this.textBox2.Text;
byte[] bMessage;
byte[] bFileName;
// string strContent;
System.Net.IPAddress ServerIP = IPAddress.Parse(strIP);
int ServerPort = Convert.ToInt32(strPort);
System.Net.IPEndPoint iep = new IPEndPoint(ServerIP,ServerPort);
//******Socket与远程主机建立连接
System.Net.Sockets.Socket mySocket = new Socket(System.Net.Sockets.AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
mySocket.Connect(iep);
//得到读取到文件的字节数组
bMessage = ReadFileData();
//得到传送的文件名
FileInfo fi = new FileInfo(this.openFileDialog1.FileName);
bFileName = System.Text.Encoding.Default.GetBytes(fi.Name+"|");
byte[] bTotalMessage = new byte[Convert.ToInt32(bMessage.Length)+Convert.ToInt32(bFileName.Length)];
bFileName.CopyTo(bTotalMessage,0);
bMessage.CopyTo(bTotalMessage,Convert.ToInt32(bFileName.Length));
//socket发送文件
mySocket.Send(bTotalMessage);
//关闭及禁用socket
mySocket.Shutdown(SocketShutdown.Both);
mySocket.Close();
//服务器端接收文件
byte[] bReMessage = new byte[16000];
string[] strReMessage;
string strShow;
System.Net.IPAddress serverIP = GetServerIP();
System.Net.IPEndPoint iep = new IPEndPoint(serverIP,8000);
System.Net.Sockets.Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
serverSocket.Bind(iep);
this.label1.Text = iep.ToString();
while(true)
{
try
{
serverSocket.Listen(5);
System.Net.Sockets.Socket newSocket = serverSocket.Accept();
newSocket.Receive(bReMessage);
strReMessage = System.Text.Encoding.Default.GetString(bReMessage).Split(new char[]{'|'});
MessageBox.Show("d:\\"+strReMessage[0]);
//将读取的文件写入服务器端指定的路径下
FileStream fs = new FileStream("d:\\"+strReMessage[0],FileMode.Create,FileAccess.Write);
fs.Write(bReMessage,0,Convert.ToInt32(bReMessage.Length));
fs.Close();
//显示写入后的相关信息
strShow = System.DateTime.Now.ToShortTimeString()+"收到文件:"+strReMessage[0];
this.listBox1.Items.Add(strShow);
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
//********问题:我是将文件名读成字节数组和读取的文件内容字节数组一起send。服务器端得到该二进制数组,然后根据“|”字符将发送的文件名从中读取出来,作为服务器端接收的文件名保存。结果是乱码。。。。如何解决?