Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将单个数据从一个项目异步发送到另一个项目_C# - Fatal编程技术网

C# 将单个数据从一个项目异步发送到另一个项目

C# 将单个数据从一个项目异步发送到另一个项目,c#,C#,如何使用C#-异步地将简单数据(例如“mango”)从一个windows项目发送到另一个windows项目 这是客户端代码 public partial class MainWindow : Window { private Socket _clientSocket; private byte[] _buffer; public MainWindow() { InitializeComponent(); } private vo

如何使用C#-异步地将简单数据(例如“mango”)从一个windows项目发送到另一个windows项目

这是客户端代码

public partial class MainWindow : Window
{
    private Socket _clientSocket;
    private byte[] _buffer;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        _clientSocket = new Socket(AddressFamily.InterNetwork, 
        SocketType.Stream, ProtocolType.Tcp);
        _clientSocket.BeginConnect(new IPEndPoint(IPAddress.Loopback, 
        3333), new AsyncCallback(ConnectCallback), null);
    }

    private void ConnectCallback(IAsyncResult AR)
    {
        _clientSocket.EndConnect(AR);
    }       

    private void SendCallback(IAsyncResult AR)
    {
        _clientSocket.EndSend(AR);
        _buffer = new byte[_clientSocket.ReceiveBufferSize];
    }

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        Click("MANGO");                     
    }

    private void btn2_Click(object sender, RoutedEventArgs e)
    {
        Click("GRAPES");            
    }

    public void Click(string xmlstring)
    {
        try
        {
            byte[] xmlbuffer = Encoding.ASCII.GetBytes(xmlstring);
             _clientSocket.BeginSend(xmlbuffer, 0, xmlbuffer.Length, 
             SocketFlags.None, new AsyncCallback(SendCallback), null);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}
服务器代码是

  public partial class Server : Window
  {
    private Socket _serversocket, _clientSocket;
    private byte[] _buffer;

    public Server()
    {
        InitializeComponent();
        StartServer();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
    }        

    private void StartServer()
    {
        _serversocket = new Socket(AddressFamily.InterNetwork, 
        SocketType.Stream, ProtocolType.Tcp);
        _serversocket.Bind(new IPEndPoint(IPAddress.Any, 3333));
        _serversocket.Listen(0);
        _serversocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
    }

    private void AcceptCallback(IAsyncResult AR)
    {
        _clientSocket = _serversocket.EndAccept(AR);
        _buffer = new byte[_clientSocket.ReceiveBufferSize];
        _clientSocket.BeginReceive(_buffer, 0, _buffer.Length, 
         SocketFlags.None, new AsyncCallback(ReceiveCallback), null);
        _serversocket.BeginAccept(new AsyncCallback(AcceptCallback), 
        null);
    }

    private void ReceiveCallback(IAsyncResult AR)
    {
        int received = _clientSocket.EndReceive(AR);
        Array.Resize(ref _buffer, received);
        string text = Encoding.ASCII.GetString(_buffer); // here get ans
        Array.Resize(ref _buffer, _clientSocket.ReceiveBufferSize);
    }
}
当我点击按钮1时,“芒果”一词应该出现在服务器端。当我点击按钮2时,“grapes”一词应该出现在服务器端

当我第一次点击按钮1时,它会工作,我在服务器端得到“芒果”。但是第二次点击按钮2时,什么也没发生——服务器端没有“grapes”这个词


请帮助正确处理。

尝试调用
\u clientSocket.BeginReceive
ReceiveCallback

的末尾,在接收事件中,您需要开始接收以获取另一条消息,在发送事件中,您需要开始发送。请参见msdn示例: