当前位置:首页 > 行业动态 > 正文

c#socket服务器端代码

csharp,using System;,using System.Net;,using System.Net.Sockets;,using System.Text;class Program,{, static void Main(), {, IPAddress ip = IPAddress.Parse("127.0.0.1");, int port = 8080;, TcpListener server = new TcpListener(ip, port);, server.Start();, Console.WriteLine("Server started..."); while (true), {, TcpClient client = server.AcceptTcpClient();, NetworkStream stream = client.GetStream();, byte[] buffer = new byte[1024];, int bytesRead = stream.Read(buffer, 0, buffer.Length);, string request = Encoding.UTF8.GetString(buffer, 0, bytesRead);, Console.WriteLine("Received: " + request); string response = "Hello from server";, byte[] responseBytes = Encoding.UTF8.GetBytes(response);, stream.Write(responseBytes, 0, responseBytes.Length); client.Close();, }, },},

一、引入必要的命名空间

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

二、定义服务器端类

class SocketServer
{
    private static int port = 12345; // 服务器监听的端口号
    private static TcpListener server;
    static void Main(string[] args)
    {
        StartServer();
    }
    public static void StartServer()
    {
        try
        {
            // 初始化TcpListener对象
            server = new TcpListener(IPAddress.Any, port);
            server.Start();
            Console.WriteLine("服务器已启动,正在监听端口:" + port);
            while (true)
            {
                // 等待客户端连接
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("客户端已连接:" + client.Client.RemoteEndPoint);
                // 创建一个新的线程来处理客户端请求
                Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
                clientThread.Start(client);
            }
        }
        catch (SocketException se)
        {
            Console.WriteLine("SocketException: " + se);
        }
    }
    public static void HandleClientComm(object obj)
    {
        TcpClient client = (TcpClient)obj;
        NetworkStream stream = client.GetStream();
        byte[] bytes = new byte[256];
        string data = null;
        while ((data = ReadData(stream)) != null)
        {
            ASCIIEncoding ascii = new ASCIIEncoding();
            byte[] sendBytes = ascii.GetBytes(data);
            stream.Write(sendBytes, 0, sendBytes.Length);
        }
        client.Close();
    }
    private static string ReadData(NetworkStream stream)
    {
        byte[] bytes = new byte[256];
        StringBuilder builder = new StringBuilder();
        int bytesRead = 0;
        do
        {
            bytesRead = stream.Read(bytes, 0, bytes.Length);
            builder.AppendFormat("{0}", Encoding.ASCII.GetString(bytes, 0, bytesRead));
        } while (stream.DataAvailable);
        return builder.ToString();
    }
}

三、代码解释

命名空间引用:引入了SystemSystem.NetSystem.Net.SocketsSystem.TextSystem.Threading等命名空间,这些是使用Socket编程所必需的。

服务器端类定义:定义了一个名为SocketServer的类,其中包含了服务器端的主要逻辑。

主函数:在Main方法中调用StartServer方法来启动服务器。

启动服务器:在StartServer方法中,首先初始化一个TcpListener对象,并绑定到指定的IP地址(这里是IPAddress.Any表示所有可用的网络接口)和端口号(这里设置为12345),然后调用Start方法开始监听客户端连接,通过一个无限循环,不断接受客户端连接,并为每个连接创建一个新线程来处理客户端通信,这样可以同时处理多个客户端连接。

c#socket服务器端代码

处理客户端通信:在HandleClientComm方法中,获取与客户端连接的NetworkStream对象,用于读写数据,通过一个循环不断读取客户端发送的数据,并将其回显给客户端,当客户端关闭连接或没有更多数据可读时,退出循环并关闭客户端连接。

读取数据ReadData方法用于从NetworkStream中读取数据,将其转换为字符串并返回,这里使用了一个简单的循环来读取所有可用的数据,直到没有更多数据可读为止。

四、运行服务器端代码

将上述代码保存为一个.cs文件,例如SocketServer.cs,然后在命令行中导航到该文件所在的目录,使用csc SocketServer.cs命令编译代码,生成一个可执行文件SocketServer.exe,运行该可执行文件,服务器将开始监听指定端口上的客户端连接。

c#socket服务器端代码

五、相关问答FAQs

问题1:如何修改服务器监听的端口号?

答:可以通过修改代码中的port变量的值来更改服务器监听的端口号,将private static int port = 12345;改为private static int port = 8080;即可将服务器监听的端口号修改为8080。

问题2:如何处理多个客户端同时连接的情况?

c#socket服务器端代码

答:如上述代码所示,在StartServer方法中使用多线程来处理客户端连接,每当有新的客户端连接时,就创建一个新的线程来处理该客户端的通信,这样可以实现多个客户端同时与服务器进行交互,而不会相互阻塞,不过需要注意的是,多线程编程可能会带来一些并发问题,如资源共享冲突等,因此在实际应用中需要进行适当的同步和错误处理。

六、小编有话说

就是一个简单的C# Socket服务器端代码示例及其相关说明,通过这个示例,你可以了解到如何使用C#编写一个基本的Socket服务器程序,实现与客户端的基本通信功能,实际的Socket编程可能会更加复杂,涉及到更多的功能和异常处理,希望这个示例能为你提供一个良好的起点,帮助你进一步学习和掌握C# Socket编程。