您的位置:首页 > 理论基础 > 计算机网络

C# 中用Socket实现判断网络是否断开的实例

2016-01-04 17:20 615 查看
转自:http://www.cnblogs.com/caoguanghong/archive/2008/09/19/1293943.html

1 using System;
 2 using System.Net;
 3 using System.Net.Sockets;
 4 using System.Text;
 5 
 6 public class SynchronousSocketClient {
 7 
 8     public static void StartClient() {
 9         // Data buffer for incoming data.
10         byte[] bytes = new byte[1024];
11 
12         // Connect to a remote device.
13         try {
14             // Establish the remote endpoint for the socket.
15             // This example uses port 11000 on the local computer.
16             IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName())
17             IPAddress ipAddress = ipHostInfo.AddressList[0];
18             IPEndPoint remoteEP = new IPEndPoint(ipAddress,11000);
19 
20             // Create a TCP/IP  socket.
21             Socket sender = new Socket(AddressFamily.InterNetwork, 
22                 SocketType.Stream, ProtocolType.Tcp );
23 
24             // Connect the socket to the remote endpoint. Catch any errors.
25             try {
26                 sender.Connect(remoteEP);
27 
28                 Console.WriteLine("Socket connected to {0}",
29                     sender.RemoteEndPoint.ToString());
30 
31                 // Encode the data string into a byte array.
32                 byte[] msg = Encoding.ASCII.GetBytes("This is a test<EOF>");
33 
34                 // Send the data through the socket.
35                 int bytesSent = sender.Send(msg);
36 
37                 // Receive the response from the remote device.
38                 int bytesRec = sender.Receive(bytes);
39                 Console.WriteLine("Echoed test = {0}",
40                     Encoding.ASCII.GetString(bytes,0,bytesRec));
41 
42                 // Release the socket.
43                 sender.Shutdown(SocketShutdown.Both);
44                 sender.Close();
45                 
46             } catch (ArgumentNullException ane) {
47                 Console.WriteLine("ArgumentNullException : {0}",ane.ToString());
48             } catch (SocketException se) {
49                 Console.WriteLine("SocketException : {0}",se.ToString());
50             } catch (Exception e) {
51                 Console.WriteLine("Unexpected exception : {0}", e.ToString());
52             }
53 
54         } catch (Exception e) {
55             Console.WriteLine( e.ToString());
56         }
57     }
58     
59     public static int Main(String[] args) {
60         StartClient();
61         return 0;
62     }
63 }

 //服务器端:

 1 using System;
 2 using System.Net;
 3 using System.Net.Sockets;
 4 using System.Text;
 5 
 6 public class SynchronousSocketListener {
 7     
 8     // Incoming data from the client.
 9     public static string data = null;
10 
11     public static void StartListening() {
12         // Data buffer for incoming data.
13         byte[] bytes = new Byte[1024];
14 
15         // Establish the local endpoint for the socket.
16         // Dns.GetHostName returns the name of the 
17         // host running the application.
18         IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
19         IPAddress ipAddress = ipHostInfo.AddressList[0];
20         IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
21 
22         // Create a TCP/IP socket.
23         Socket listener = new Socket(AddressFamily.InterNetwork,
24             SocketType.Stream, ProtocolType.Tcp );
25 
26         // Bind the socket to the local endpoint and 
27         // listen for incoming connections.
28         try {
29             listener.Bind(localEndPoint);
30             listener.Listen(10);
31 
32             // Start listening for connections.
33             while (true) {
34                 Console.WriteLine("Waiting for a connection

");
35                 // Program is suspended while waiting for an incoming connection.
36                 Socket handler = listener.Accept();
37                 data = null;
38 
39                 // An incoming connection needs to be processed.
40                 while (true) {
41                     bytes = new byte[1024];
42                     int bytesRec = handler.Receive(bytes);
43                     data += Encoding.ASCII.GetString(bytes,0,bytesRec);
44                     if (data.IndexOf("<EOF>") > -1) {
45                         break;
46                     }
47                 }
48 
49                 // Show the data on the console.
50                 Console.WriteLine( "Text received : {0}", data);
51 
52                 // Echo the data back to the client.
53                 byte[] msg = Encoding.ASCII.GetBytes(data);
54 
55                 handler.Send(msg);
56                 handler.Shutdown(SocketShutdown.Both);
57                 handler.Close();
58             }
59             
60         } catch (Exception e) {
61             Console.WriteLine(e.ToString());
62         }
63 
64         Console.WriteLine("\nPress ENTER to continue

");
65         Console.Read();
66         
67     }
68 
69     public static int Main(String[] args) {
70         StartListening();
71         return 0;
72     }

73 }

 

// 服务器端(固定的实例)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.ServiceProcess;

using System.Text;

using System.Net;

using System.Net.Sockets;

namespace SynchronousSocketListener

{

    partial class SocketListener : ServiceBase

    {

        public static string strData = null;

        System.Timers.Timer tmTrick = new System.Timers.Timer();

        public delegate void OperationDelegate();

        public SocketListener()

        {

            InitializeComponent();

        }

        protected override void OnStart(string[] args)

        {

            tmTrick.Enabled = true;

            tmTrick.Interval = 3;

            tmTrick.Elapsed += new System.Timers.ElapsedEventHandler(StartListening);

            tmTrick.Start();

            DataEventLog.WriteEntry("调运系统网络状态监控服务成功启动!");

        }

        protected override void OnStop()

        {

            DataEventLog.WriteEntry("调运系统网络状态监控服务成功停止!");

        }

        protected void StartListening(object sender, EventArgs e)

        {

            tmTrick.Stop();

            byte[] bytes = new Byte[1024];

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

            IPAddress ipAddress = ipHostInfo.AddressList[0];

            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 10000);

            Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try

            {

                listener.Bind(localEndPoint);

                listener.Listen(30);

                while (true)

                {

                    Socket sktHandler = listener.Accept();

                    strData = null;

                    while (true)

                    {

                        bytes = new byte[1024];

                        int bytesRec = sktHandler.Receive(bytes);

                        strData += Encoding.ASCII.GetString(bytes, 0, bytesRec);

                        if (strData.IndexOf("<EOF>") > -1)

                        {

                            break;

                        }

                    }

                    byte[] btMessage = Encoding.ASCII.GetBytes(strData);

                    sktHandler.Send(btMessage);

                    sktHandler.Shutdown(SocketShutdown.Both);

                    sktHandler.Close();

                }

            }

            catch (Exception ex)

            {

                DataEventLog.WriteEntry(ex.ToString());

            }

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: