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