同时发送和接收文件

时间:2011-10-30 22:37:42

标签: c# sockets

我是套接字编程的新手,所以我有一个问题。我正在尝试创建两个应用程序,一个服务器和一个客户端,它们必须通过互联网相互发送和接收文件(发送和接收文件)。将只有一个服务器和一个客户端,所以我决定,我不需要异步套接字连接。 我试图通过一个套接字连接发送和接收文件,但它不起作用。现在我尝试使用两个套接字,使用相同的IP和不同的端口在不同的线程中运行,但它不再起作用。我是否必须在源代码中找到问题,否则我将不得不使用异步套接字连接?

这是我的服务器端应用程序。两个套接字的代码非常相似,唯一 区别在于我正在使用的端口。

// My main thread starts another one, for the receiving of files
    public static void StartListening() {
        t = new Thread(receiveFile);
        t.Start();
        sendFile();
    }

//

        static void sendFile()
        {
            IPAddress ipAddress = IPAddress.Parse("192.168.1.101");
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 10999);
            Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream,   ProtocolType.Tcp);
            try
            {
                listener.Bind(localEndPoint);
                listener.Listen(10);
                while (true)
                {
                    handler = listener.Accept();
                    //code after connecting for sending files
                    while(true) {
                       //...
                    }
                }
            }
            catch(Exception e) {}
         }


    static void receiveFile()
    {
        IPAddress ipAddress = IPAddress.Parse("192.168.1.101");
        IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
        Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        try
        {
            listener.Bind(localEndPoint);
            listener.Listen(10);
            while(true) {
                handler = listener.Accept();
                //code after connecting for receiving files
                while(true) {
                    //... 
                }
            }
        }
        catch(Exception e) {}
     }

这就是我的客户端应用程序中用于连接套接字的代码。 唯一的区别在于套接字:

//Again i start a second thread, for the second socket
public static void StartClient() {
    t = new Thread(receiveFile);
    t.Start();
    sendFile();
}

static void sendFile()
{
    try
    {
        IPAddress ipAddress = IPAddress.Parse("95.110.62.74");
        IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);
        sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        try
        {
            sender.Connect(remoteEP);
            //Code  for sending to the server after connecting
            while (true) { }
        }
        catch(Exception e) {}
    }
    catch(Exception e) { }

}

static void receiveFile()
{
    try
    {
        IPAddress ipAddress = IPAddress.Parse("95.110.62.74");
        IPEndPoint remoteEP = new IPEndPoint(ipAddress, 10999);
        sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        try
        {
            sender.Connect(remoteEP);
            //Code  for sending to the server after connecting
            while (true) { }
        }
        catch(Exception e) {}
    }
    catch(Exception e) { }
}

我在服务器和客户端应用程序中使用不同的IP,因为我的服务器位于路由器后面,我告诉路由器将连接转发到两个potrs。当我启动这两个程序时,它们只通过一个套接字连接,每次都不同,我的意思是有时它们连接到端口10999上的一个,有时连接到另一个,但从不连接到两个。

我不确定,如果我清楚地解释了一切:)

提前致谢

0 个答案:

没有答案