c语言编程笔录

首页 >   > 笔记大全

笔记大全

C Socket实现简单控制台案例

更新时间:2023-11-11

引言

Socket编程是一种网络编程模型,可以使用它来实现基础的网络通信。使用Socket你可以编写服务器,客户端或者是两者兼备的程序。C#中原生支持Socket编程,用于构建基于TCP或UDP协议的网络连接。在这个案例中,我们将解释如何使用C# Socket库实现简单的控制台程序。

代码

首先,我们需要打开Visual Studio并创建控制台应用程序。创建完成后,我们就可以开始编写代码。下面是服务器端代码:


using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace SocketServerDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] bytes = new Byte[1024];
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 8080);

            try
            {
                Socket listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                listener.Bind(localEndPoint);
                listener.Listen(10);

                while (true)
                {
                    Console.WriteLine("Waiting for a connection...");
                    Socket handler = listener.Accept();
                    Console.WriteLine($"Connection from {handler.RemoteEndPoint}");

                    string data = null;

                    while (true)
                    {
                        bytes = new byte[1024];
                        int bytesRec = handler.Receive(bytes);
                        data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
                        if (data.IndexOf("") > -1)
                        {
                            break;
                        }
                    }

                    Console.WriteLine($"Received: {data}");
                    byte[] msg = Encoding.ASCII.GetBytes("ACK");
                    handler.Send(msg);
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

上述代码演示了如何使用C# Socket库创建一个服务器。它会监听端口8080,等待客户端连接。一旦客户端连接成功,服务器就会读取从客户端发来的数据,并将其转成字符串,最后回发一个“ACK”指示成功接收到该消息。

接下来,我们需要编写客户端代码:


using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace SocketClientDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] bytes = new byte[1024];
            try
            {
                IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
                IPEndPoint remoteEndPoint = new IPEndPoint(ipAddress, 8080);

                Socket sender = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

                sender.Connect(remoteEndPoint);

                Console.Write("Enter message: ");
                string message = Console.ReadLine();

                byte[] msg = Encoding.ASCII.GetBytes(message + "");

                int bytesSent = sender.Send(msg);

                int bytesRec = sender.Receive(bytes);
                Console.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytesRec));
                sender.Shutdown(SocketShutdown.Both);
                sender.Close();
            }
            catch (SocketException sex)
            {
                Console.WriteLine(sex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

客户端代码首先创建一个表示服务器IP地址和端口的IPEndPoint对象。然后,相应的Socket对象被创建和连接。最后,客户端将要发送给服务器的数据作为字符串被读取,并在其末尾加上“”来标记该消息的结束。在消息成功发送后,客户端从服务器接收ACK消息并打印到控制台。

总结

本案例演示了如何使用C# Socket库实现简单的控制台程序,包括服务器代码和客户端代码。通过这个案例,你应该已经学会如何使用C# Socket库来创建基于TCP协议的网络连接。

总之,Socket编程可以让你实现多种不同类型的网络应用程序,包括聊天室程序、文件传输应用程序、视频聊天应用程序等等。如果你对网络编程感兴趣,Socket编程一定值得一试。