В c # при моделировании лан-мессенджера я использую адрес обратной связи только для проверки текущего кода и могу получить первое отправляемое сообщение. Однако после этого в сокет не поступает никаких сообщений. там что-нибудь делать с очисткой буфера сокета?
Это функция обратного вызова при установлении соединения:
private void accepted(IAsyncResult iar)
{
Socket server = (Socket)iar.AsyncState;
Socket client = server.EndAccept(iar);
if (client.Connected)
{
try
{
client.BeginReceive(receive, 0, receive.Length, System.Net.Sockets.SocketFlags.None, new AsyncCallback(rec), client);
}
catch (ArgumentException)
{
MessageBox.Show("arguments incorrect in begin-receive call", "Error", MessageBoxButtons.OK);
}
catch (SocketException)
{
MessageBox.Show("error in accessing socket while receiving", "Error", MessageBoxButtons.OK);
}
catch (ObjectDisposedException)
{
MessageBox.Show("socket closed while receiving", "Error", MessageBoxButtons.OK);
}
catch (Exception)
{
MessageBox.Show("error while receiving", "Error", MessageBoxButtons.OK);
}
}
Это функция обратного вызова при выполнении метода begin-receive:
void rec(IAsyncResult ar)
{
StringBuilder receivedData;
//String oldvalue;
Socket remote = (Socket)ar.AsyncState;
int recv = remote.EndReceive(ar);
receivedData = new StringBuilder(Encoding.ASCII.GetString(receive, 0, recv));
//MessageBox.Show(receivedData.ToString(), "received", MessageBoxButtons.OK);
StringBuilder sb = new StringBuilder(this.textBox1.Text);
sb.AppendLine(receivedData.ToString());
if (textBox1.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate { this.textBox1.Text = sb.ToString(); });
}
remote.Close(5);
return;
}
Имеет ли это какое-либо отношение к построителю строк или типу данных строки для назначения данных, полученных для переменной.