+ -
当前位置:首页 → 问答吧 → 局域网内实现socket上传文件

局域网内实现socket上传文件

时间:2011-12-05

来源:互联网

前天通过http协议把上传文件功能做好了,我们老大说要简单点,无需装iis的用socket方式做。
我之前没用socket方式做过。找了些资料看得头晕晕的了。
所以过来求助一下。
实现功能:
  局域网内实现定时扫描指定文件夹(分多级目录)下所有文件上传至服务器。
服务器端接受文件保存至指定文件夹下。
求大虾们赐教,在下感激不尽

作者: hyx199012   发布时间: 2011-12-05

自己先顶下

作者: hyx199012   发布时间: 2011-12-05

获取所有该目录下的文件。文件读入内存——分割——传输,读一个发一个。

作者: shashengduguzhe   发布时间: 2011-12-05

C# code
Socket sendSocket = null;
            try
            {
                sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sendSocket.Connect(IP);

                string fileName = Path.GetFileName(filePath);

                byte[] buffCompanyID = new byte[4];
                buffCompanyID = BitConverter.GetBytes(fCompanyID);

                byte[] buffImageLength = new byte[4];
                buffImageLength = BitConverter.GetBytes(fileName.Length);
                byte[] buffImageName = new byte[fileName.Length];
                buffImageName = Encoding.Default.GetBytes(fileName);

                Stream s = File.Open(filePath, FileMode.Open);
                int leng = 0;
                if (s.Length < int.MaxValue)
                    leng = (int)s.Length;
                byte[] by = new byte[leng];
                s.Read(by, 0, leng);
                s.Close();

                MemoryStream ms = new MemoryStream();
                ms.Write(buffCompanyID, 0, 4);
                ms.Write(buffImageLength, 0, 4);
                ms.Write(buffImageName, 0, fileName.Length);
                ms.Write(by, 0, leng);
                byte[] anotherBytes = ms.GetBuffer();

                sendSocket.Send(anotherBytes, 8 + fileName.Length + leng, SocketFlags.None);
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (sendSocket != null)
                {
                    sendSocket.Shutdown(SocketShutdown.Both);
                    sendSocket.Close();
                }
            }
            return true;
        }

。我这个是将文件流和文件名字。文件名字长度。和客户id.合并成的一个大流。一次性传到服务器上去的。你看下吧。。希望对你有用。

作者: tangjia281323   发布时间: 2011-12-05

上传文件,是不是WEB方式呀

作者: sgzhou12345   发布时间: 2011-12-05

引用 3 楼 tangjia281323 的回复:

C# code
Socket sendSocket = null;
try
{
sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sendSocket.C……

你的这个服务器端回事什么样子的

作者: hyx199012   发布时间: 2011-12-05

问这个问题的不少啊,看例子socket点对点传输文件
http://www.netxk.cn/?p=145

作者: ylwhlgg   发布时间: 2011-12-05

引用 4 楼 sgzhou12345 的回复:

上传文件,是不是WEB方式呀

之前用web方式做好了一个,现在要换成socket文件传输了

作者: hyx199012   发布时间: 2011-12-05

顶一下

作者: q198708wyp   发布时间: 2011-12-05