免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1452 | 回复: 0
打印 上一主题 下一主题

c#简单socket server [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-05 17:05 |只看该作者 |倒序浏览
参考地址:
http://msdn.microsoft.com/zh-cn/library/fx6588te.aspx
----------------------using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.Threading;
namespace ConsoleApplicationSS{    // State object for reading client data asynchronously    public class StateObject    {        // Client  socket.        public Socket workSocket = null;        // Size of receive buffer.        public const int BufferSize = 1024;        // Receive buffer.        public byte[] buffer = new byte[BufferSize];        // Received data string.        public StringBuilder sb = new StringBuilder();    }
    class AsynchronousSocketListener    {
   // Thread signal.        public static ManualResetEvent allDone = new ManualResetEvent(false);
        public AsynchronousSocketListener() {        }
        public static void StartListening() {            // Data buffer for incoming data.            byte[] bytes = new Byte[1024];
            // Establish the local endpoint for the socket.            // The DNS name of the computer            // running the listener is "host.contoso.com".            IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());            IPAddress ipAddress = ipHostInfo.AddressList[0];            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 1000);
            // Create a TCP/IP socket.            Socket listener = new Socket(AddressFamily.InterNetwork,                SocketType.Stream, ProtocolType.Tcp );
            // Bind the socket to the local endpoint and listen for incoming connections.            try {                listener.Bind(localEndPoint);                listener.Listen(100);
                while (true) {                    // Set the event to nonsignaled state.                    allDone.Reset();
                    // Start an asynchronous socket to listen for connections.                    Console.WriteLine("Waiting for a connection...");                    listener.BeginAccept(                        new AsyncCallback(AcceptCallback),                        listener );
                    // Wait until a connection is made before continuing.                    allDone.WaitOne();                }
            } catch (Exception e) {                Console.WriteLine(e.ToString());            }
            Console.WriteLine("\nPress ENTER to continue...");            Console.Read();                    }
        public static void AcceptCallback(IAsyncResult ar) {            // Signal the main thread to continue.            allDone.Set();
            // Get the socket that handles the client request.            Socket listener = (Socket) ar.AsyncState;            Socket handler = listener.EndAccept(ar);
            // Create the state object.            StateObject state = new StateObject();            state.workSocket = handler;            handler.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,                new AsyncCallback(ReadCallback), state);        }
        public static void ReadCallback(IAsyncResult ar) {            String content = String.Empty;                        // Retrieve the state object and the handler socket            // from the asynchronous state object.            StateObject state = (StateObject) ar.AsyncState;            Socket handler = state.workSocket;
            // Read data from the client socket.             int bytesRead = handler.EndReceive(ar);
            if (bytesRead > 0) {                // There  might be more data, so store the data received so far.                //state.sb.Append(Encoding.UTF8.GetString(state.buffer,0,bytesRead));
                // Check for end-of-file tag. If it is not there, read                 // more data.                //content = state.sb.ToString();                content = Encoding.UTF8.GetString(state.buffer, 0, bytesRead);         //       if (content.IndexOf("") > -1) {                    // All the data has been read from the                     // client. Display it on the console.                    Console.WriteLine("Read  Data : {1}",content.Length, content );                    // Echo the data back to the client.                    Send(handler, content);                         //       } else {                    // Not all data received. Get more.                    handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,                    new AsyncCallback(ReadCallback), state);         //       }            }        }                private static void Send(Socket handler, String data) {            // Convert the string data to byte data using UTF8 encoding.            byte[] byteData = Encoding.UTF8.GetBytes(data);         //   Console.WriteLine("Sent to client:{1}",byteData.Length , data);            // Begin sending the data to the remote device.            handler.BeginSend(byteData, 0, byteData.Length, 0,                new AsyncCallback(SendCallback), handler);        }
        private static void SendCallback(IAsyncResult ar) {            try {                // Retrieve the socket from the state object.                Socket handler = (Socket) ar.AsyncState;
                // Complete sending the data to the remote device.                int bytesSent = handler.EndSend(ar);              //  Console.WriteLine("Sent {0} bytes to client.", bytesSent);
           //     handler.Shutdown(SocketShutdown.Both);           //     handler.Close();
            } catch (Exception e) {                Console.WriteLine(e.ToString());            }        }                static void Main(string[] args)        {            StartListening();        }    }}
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/28508/showart_1165768.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP