请问大侠,socket的异步处理是不是就是在服务端采用多线程的方式,如果不是 ,多线程与异步处理有哪些区别。
解决方案 »
- 水晶报表,换了电脑就不显示报表了。
- C#异常处理
- winform smtp发邮件
- C#循序或者随机中生成中文字符
- 新建QQ .net以及相关技术 交流群,47324496,有意者加入,
- 在线等待!!!使用ICSharpCode.SharpZipLib.dll来压缩和解压缩
- 交换源码控件(C#.NET)
- 一本类似《深入浅出MFC》的书,希望提高自已档次的朋友进来可以看一下
- .net2005 怎么去除控件获取焦点时画的方型虚线? 最好的方法是什么呢?
- C#中如何创建文本文件?
- 各位帮我看一下,为什么我这个datagridview出不来数据(vs2005 连oracle 9)
- Oracle 中DATE格式 数据导出问题
{
recvByteBuffer = new byte[1500];
string LocalIp = LocalIP.Text.Trim();
try
{
_multiOpetion = new MulticastOption(IPAddress.Parse("239.255.255.250"),
IPAddress.Parse(LocalIp)); }
catch
{
MessageBox.Show("LocalIP error!!!");
}
string strMSearch = "";
strMSearch += "M-SEARCH * HTTP/1.1\r\n";
strMSearch += "Host: 239.255.255.250:1900\r\n";
strMSearch += "MAN: \"ssdp:discover\"\r\n";
strMSearch += "MX: 5\r\n";
strMSearch += "ST: urn:schemas-bmlinks-jp:service:print:1\r\n";
strMSearch += "RID: uuid:67e36cda-b28d-4ab0-82f7-2a53f71a7169\r\n";
strMSearch += "ACCEPT-CHARSET: utf-8\r\n";
strMSearch += "ACCEPT-LANGUAGE: ja,en\r\n\r\n";
try
{
_udpsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse(LocalIp), 1901); _udpsock.Bind(endpoint); _udpsock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); Byte[] sendBytes = System.Text.Encoding.UTF8.GetBytes(strMSearch); IPEndPoint ipTargetdest = new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900); _udpsock.SendTo(sendBytes, ipTargetdest);
}
catch (Exception eException)
{
MessageBox.Show(eException.Message, "send error");
}
IPEndPoint recvep = new IPEndPoint(IPAddress.Any, 1900);
EndPoint recvip = (EndPoint)recvep;
try
{
while (true)
{
StateObject so2 = new StateObject();
so2.mySocket = _udpsock;
receiveCallback = new AsyncCallback(ResReceived);
_udpsock.BeginReceiveFrom
(recvByteBuffer, 0, 1500, SocketFlags.None, ref recvip,
receiveCallback, so2);
//ResText.Text += recvByteBuffer.ToString();
} }
catch (System.Exception cException)
{
MessageBox.Show(cException.Message, "exception occurred");
}
for (int iRcv = 0; iRcv < recvByteBuffer.Length; ++iRcv)
{
if (recvByteBuffer[iRcv] == '\0')
{
break;
}
ResText.Text += System.Convert.ToString(System.Convert.ToChar(recvByteBuffer[iRcv]));
}
}
private void ResReceived(IAsyncResult ar)
{
StateObject st = (StateObject)ar.AsyncState; IPEndPoint exp = new IPEndPoint(IPAddress.Any, 1900);
EndPoint recvep = (EndPoint)exp;
int recv = 0;
try
{
recv = st.mySocket.EndReceiveFrom(ar, ref recvep);
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
if (recv > 0)
{ //ResText.Text += Encoding.UTF8.GetString(recvByteBuffer, 0, recv);
Array.Clear(recvByteBuffer, 0, recvByteBuffer.Length);
st.mySocket.BeginReceiveFrom(recvByteBuffer, 0, recvByteBuffer.Length, SocketFlags.None, ref recvep, receiveCallback, st.mySocket);
}
else
{
MessageBox.Show("end ");
st.mySocket.Close();
}
}