System.NotSupportedException:非连接套接字上不允许该操作

时间:2016-12-19 15:26:54

标签: c# sockets

我正在创建一个C#应用程序,我通过套接字通过LAN连接发送文件,但我遇到了一个" System.NotSupportedException"当我调用发送功能时

这是文件接收者的功能。

    Socket _newSocket;
    List<byte> endBuffer;

    // Used to connect to the server
    private void button1_Click(object sender, EventArgs e)
    {
        _newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        _newSocket.Connect(IPAddress.Parse("127.0.0.1"), _PORT);
    }

    // Used to Receive the file
    private void button3_Click(object sender, EventArgs e)
    {
        _newSocket.Receive(endBuffer.ToArray(), SocketFlags.None);
        MessageBox
            .Show(Encoding.ASCII.GetString(endBuffer.ToArray(), 0, endBuffer.Count));
    }

这是我用来启动服务器的功能。

void SetupServer(object sender)
    {
        Button temp = (Button)sender;
        temp.Enabled = false;
        _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        _serverSocket.Bind(new IPEndPoint(IPAddress.Parse(txtConnectToIP.Text), _PORT));
        _serverSocket.Listen(5);
        _serverSocket.BeginAccept(AcceptCallback, null);
    }

    void AcceptCallback(IAsyncResult AR)
    {
        Socket socket;

        try
        {
            socket = _serverSocket.EndAccept(AR);
        }
        catch
        {
            MessageBox.Show("Not Working!");
            return;
        }

        _clientSockets.Add(socket);
        int id = _clientSockets.Count - 1;
        IPAddress ip = IPAddress.Parse(_serverSocket.LocalEndPoint.ToString().Split(':')[0]);
        string HostName = Dns.GetHostEntry(ip).HostName.Split('.')[0];
        string finalName = HostName + " (" + ip.ToString() + ")";
        AddClientForSelectionCallback(finalName);
    }

这是发送功能。

byte[] postBuffer = Encoding.ASCII.GetBytes("Sending Complete!");

    void Send(string filePath)
    {
        try
        {
            _serverSocket.SendFile(filePath, null, postBuffer, TransmitFileOptions.ReuseSocket);
        }
        catch (Exception ec)
        {
            MessageBox.Show("Failed with error message:\n   "+ ec);
        }
    }

最后,如何接收发送的文件,因为_newSocket.Receive()似乎不起作用。我已经看过将其结果存储在var中,但是Receive没有返回任何内容,我将尝试使用ConnectAsync。

真的很感激帮助。

1 个答案:

答案 0 :(得分:0)

在您的程序中,_serverSocket是接受传入连接的套接字,您无法向其发送数据。

只要接受连接,就会获得该连接的套接字:

socket = _serverSocket.EndAccept(AR);

您可以使用此套接字实例与该特定客户端进行通信。