繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> Socket异步编程-之服务器端

Socket异步编程-之服务器端

2007-09-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:1 using System; 2 using System.Text; 3 using System.Threading; 4 using System.Net.Sockets; 5 using System.Net; 6 namespace asyncSocketServer { 7 8 class SocketListener { 9 System.Threa...
关键字:编程 服务器 Socket

1 using System;

2 using System.Text;

3 using System.Threading;

4 using System.Net.Sockets;

5 using System.Net;

6 namespace asyncSocketServer {

7

8 class SocketListener {

9 System.Threading.ManualResetEvent allDone=new ManualResetEvent(false);

10 [STAThread]

11 static void Main(string[] args) {

12 SocketListener server=new SocketListener();

13 server.StartListening();

14 }

15

16 public void StartListening() {

17 IPHostEntry ipHostInfo=Dns.Resolve(Dns.GetHostName());

18 IPEndPoint localEP=new IPEndPoint(ipHostInfo.AddressList[0],11000);

19 Console.WriteLine("Local address and pot:{0}",localEP.ToString());

20 Socket listener=new Socket(AddressFamily.InterNetwork,

21 SocketType.Stream,ProtocolType.Tcp);

22 try {

23 listener.Bind(localEP);

24 listener.Listen(10);

25 while (true) {

26 allDone.Reset();

27 Console.WriteLine("Waiting for a connection");

28 listener.BeginAccept(new AsyncCallback(acceptCallback),listener);

29 allDone.WaitOne(); //阻塞主线程

30 }

31 }

32 catch(Exception ex) {

33 Console.WriteLine(ex.ToString());

34 }

35 Console.WriteLine("Closing the Listener.");

36 }

37

38 public void acceptCallback(IAsyncResult ar) {

39 Socket listener=(Socket)ar.AsyncState;

40 Socket handler=listener.EndAccept(ar);

41 //设置主线程继续

42 allDone.Set();

43 StateObject state=new StateObject();

44 state.workSocket=handler;

45 handler.BeginReceive(state.buffer,0,StateObject.BufferSize,0,

46 new AsyncCallback(readCallback),state);

47 }

48

49 public void readCallback(IAsyncResult ar) {

50 StateObject state=(StateObject)ar.AsyncState;

51 Socket handler=state.workSocket;

52 int read=handler.EndReceive(ar);

53 if (read>0) {

54 state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,read));

55 handler.BeginReceive(state.buffer,0,StateObject.BufferSize,0,

56 new AsyncCallback(readCallback),state);

57 }

58 else {

59 if (state.sb.Length>1) {

60 string content=state.sb.ToString();

61 Console.WriteLine("Read {0} bytes from socket.\n Data:{1}",

62 content.Length,content);

63 }

64 handler.Close();

65 }

66 }

67 }

68

69 public class StateObject {

70 public Socket workSocket=null;

71 public const int BufferSize=1024;

72 public byte[] buffer=new byte[BufferSize];

73 public StringBuilder sb=new StringBuilder();

74 }

75 }

76

责任编辑:admin
相关文章