socket发送文件,服务器端如何得到所发送文件的文件名?

ydp_00769 2006-09-06 03:58:43
//////客户端发送文件
//******首先得到服务器的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。服务器端得到该二进制数组,然后根据“|”字符将发送的文件名从中读取出来,作为服务器端接收的文件名保存。结果是乱码。。。。如何解决?
...全文
359 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ydp_00769 2006-09-08
  • 打赏
  • 举报
回复
这样啊?那得分开来做了。谢了啊!!!
leonbingo 2006-09-06
  • 打赏
  • 举报
回复
这个问题需要你发两次包,第一次发文件的名字,大小等信息,等对方确认后开始传输文件内容

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧