我想做一个用socket传输文件的功能
具体要求是
1,服务器是用来接收文件的,服务器一直在监听端口,不用知道发送机器的IP就可以来接收文件,一旦有客户端连接立即开始接收文件
2,客户端为发送文件的机器,输入服务器的IP和端口再给服务器一个文件夹名就可以把这个文件夹中的文件都发送到服务器上我在网上下的例子都是需要服务器输入了客户端的IP才可以接收文件的,我想要不需要知道发送机器的IP就可以来接收文件
而且要多线程可以同时操作的

解决方案 »

  1.   

    事实上客户端在连接的时候服务器就已经知道IP了直接用FTP不就可以了吗?用得着自己写嘛?
      

  2.   

    Client Code:using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.IO;
    namespace Client_Socket
    {
    //FILE TRANSFER USING C#.NET SOCKET - CLIENT
    class Program
    {
    static void Main(string[] args)
    {
    try
    {
    Console.WriteLine("That program can transfer small file. I've test up to 850kb file");
    IPAddress[] ipAddress = Dns.GetHostAddresses("localhost");
    IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656);
    Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
    string fileName = "Your File Name";
    string filePath = "Your File Path";
    byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName);byte[] fileData = File.ReadAllBytes(filePath + fileName);
    byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
    byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);fileNameLen.CopyTo(clientData, 0);
    fileNameByte.CopyTo(clientData, 4);
    fileData.CopyTo(clientData, 4 + fileNameByte.Length);clientSock.Connect(ipEnd);
    clientSock.Send(clientData);
    Console.WriteLine("File:{0} has been sent.", fileName);
    clientSock.Close();
    Console.ReadLine();
    }
    catch (Exception ex)
    {
    Console.WriteLine("File Sending fail." + ex.Message);
    }}
    }
    }Server Code:using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.IO;
    namespace beginSocketServer
    {
    //FILE TRANSFER USING C#.NET SOCKET - SERVER
    class Program
    {
    static void Main(string[] args)
    {
    try
    {
    Console.WriteLine("That program can transfer small file. I've test up to 850kb file");
    IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 5656);
    Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
    sock.Bind(ipEnd);
    sock.Listen(100);
    Socket clientSock = sock.Accept();byte[] clientData = new byte[1024 * 5000];
    string receivedPath = "e:/";int receivedBytesLen = clientSock.Receive(clientData);int fileNameLen = BitConverter.ToInt32(clientData, 0);
    string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen);Console.WriteLine("Client:{0} connected & File {1} started received.", clientSock.RemoteEndPoint, fileName);BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + fileName, FileMode.Append)); ;
    bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen);Console.WriteLine("File: {0} received & saved at path: {1}", fileName, receivedPath);bWrite.Close();
    clientSock.Close();
    Console.ReadLine();
    }
    catch (Exception ex)
    {
    Console.WriteLine("File Receiving fail." + ex.Message);
    }
    }
    }
    }
      

  3.   

    怎么能用socket获得客户机的 计算机名呢
    我怎么获得不到啊```
      

  4.   

    hongqi162 的方法传小文件可以,但不能断点续传。