socket.BeginReceive的方式在什么时机用?
我在与测试服务器(将接收到的数据发回客户端)建立连接后就创建了一条线程来执行BeginReceive及其回调,
然后我通过BeginSend向测试服务器发送数据后,服务端确认收到并且回发了数据,但是客户端那里却没有收到返回回来的数据
我想知道是森么回事,问题要怎么解决
我在与测试服务器(将接收到的数据发回客户端)建立连接后就创建了一条线程来执行BeginReceive及其回调,
然后我通过BeginSend向测试服务器发送数据后,服务端确认收到并且回发了数据,但是客户端那里却没有收到返回回来的数据
我想知道是森么回事,问题要怎么解决
public partial class Form1 : Form
{
IPAddress myip;
Socket mysocket;
NetworkStream constream;
IPEndPoint myclient; public static ManualResetEvent handlevenet = new ManualResetEvent(false); public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{ try
{
myip = IPAddress.Parse(textBox1.Text);
}
catch
{
MessageBox.Show("ip错误,请重新输入");
return;
} try
{
myclient = new IPEndPoint(myip, Int32.Parse(textBox2.Text));
mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//while (true)
//{
handlevenet.Reset();
mysocket.BeginConnect(myclient, new AsyncCallback(connectserver), mysocket);
handlevenet.WaitOne();
// }
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
} } public void connectserver(IAsyncResult ar)
{ try
{
Socket client = (Socket)ar.AsyncState;
client.EndConnect(ar);
}
catch (Exception xx)
{
MessageBox.Show(xx.Message);
} try
{
string str="通了,可以通信了";
byte[] data = System.Text.Encoding.BigEndianUnicode.GetBytes(str); mysocket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(senddata), mysocket); }
catch (Exception xxe)
{
MessageBox.Show(xxe.Message);
} Thread newthread = new Thread(new ThreadStart(target));
newthread.Start(); handlevenet.Set();
} public void target()
{ byte[] rec=new byte[512];
mysocket.BeginReceive(rec, 0, rec.Length, SocketFlags.None, new AsyncCallback(recdate), mysocket);
string ssss=System.Text.Encoding.BigEndianUnicode.GetString(rec);
MessageBox.Show(ssss);
}
public void recdate(IAsyncResult ar)
{ Socket clinet = (Socket)ar.AsyncState;
clinet.EndReceive(ar);
} public void senddata(IAsyncResult ar)
{ Socket newsocket = (Socket)ar.AsyncState;
newsocket.EndSend(ar);
} private void button2_Click(object sender, EventArgs e)
{
try
{
byte[] senddata1 = System.Text.Encoding.BigEndianUnicode.GetBytes(textBox3.Text);
mysocket.BeginSend(senddata1, 0, senddata1.Length, SocketFlags.None, new AsyncCallback(senddata), mysocket); textBox3.Text = "";
}
catch (Exception exxx)
{
MessageBox.Show(exxx.Message);
} } private void button3_Click(object sender, EventArgs e)
{
try
{
mysocket.Close();
}
catch (Exception xxe)
{
MessageBox.Show(xxe.Message);
}
} }
}