C#.NET中Socket简单实用框架的使用教程
什么是Socket框架?
Socket框架是一种网络编程模型,被广泛应用于各种网络通信应用程序的开发中,包括聊天工具、文件传输、视频会议等。Socket框架通过封装了底层的TCP/IP协议,提供了一种简单、灵活且高效的网络编程模型。通常情况下,使用Socket框架编写网络应用程序需要掌握C#语言和.NET框架的基础知识,而使用Socket框架的实际步骤则可以参照下文所述。
实现步骤
1. 创建服务器端
要使用Socket框架实现服务器端,首先需要在C#中使用System.Net.Sockets一个命名空间。然后,通过TcpListener类的构造函数创建TcpListener对象。代码如下:
using System.Net.Sockets;
TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 1234);
在服务器端代码中,首先需要创建一个Socket对象,此处IP为本地回环地址127.0.0.1,端口号为1234。
接下来,调用TcpListener类的Start()方法,来开启监听指定的端口。
listener.Start();
在服务器端等待客户端连接时,需要使用Accept()方法,创建一个Socket对象与客户端进行通信。
Socket socket = listener.AcceptSocket();
2. 创建客户端
使用C#的Socket框架来实现客户端与服务器连接,需要使用TcpClient类。客户端的代码如下:
using System.Net.Sockets;
TcpClient client = new TcpClient("127.0.0.1", 1234);
同样,在客户端编写代码时,需要指定连接的服务器的IP地址和端口号。
3. 数据收发
在Socket框架中,我们使用NetworkStream类来传输数据。具体实现时,需要创建一个NetworkStream对象,然后利用该对象提供的流进行数据的收发。在服务器端和客户端均如此实现。示例如下:
服务器端代码:
using System.Net.Sockets;
using System.Text;
byte[] buffer = new byte[1024];
int bytes = socket.Receive(buffer);
string message = Encoding.ASCII.GetString(buffer, 0, bytes);
byte[] data = Encoding.ASCII.GetBytes("Hello, client!");
socket.Send(data);
客户端代码:
using System.Net.Sockets;
using System.Text;
byte[] data = Encoding.ASCII.GetBytes("Hello, server!");
client.GetStream().Write(data, 0, data.Length);
byte[] buffer = new byte[1024];
int bytes = client.GetStream().Read(buffer, 0, buffer.Length);
string message = Encoding.ASCII.GetString(buffer, 0, bytes);
在上述代码中,我们对数据使用了编码格式,在代码中可以看到,实现了Ascii的编码方式。客户端使用GetStream()函数获得NetworkStream对象,调用Write()方法向服务端发送数据。服务端同理使用Receive()方法接收数据,再用Send()方法发送回客户端。
示例
接下来给出两个小示例(分别是客户端和服务器端),以更加具体直观地讲解Socket框架实用教程。
1. 客户端
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace Client
{
class Program
{
static void Main(string[] args)
{
TcpClient client = new TcpClient();
client.Connect("127.0.0.1", 8888);
NetworkStream stream = client.GetStream();
string input;
while ((input = Console.ReadLine()) != null)
{
byte[] message = Encoding.ASCII.GetBytes(input);
stream.Write(message, 0, message.Length);
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine(response);
}
stream.Close();
client.Close();
}
}
}
2. 服务器端
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace Server
{
class Program
{
static void Main(string[] args)
{
TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8888);
listener.Start();
Console.WriteLine("Server running...");
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Client connected");
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
while (true)
{
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string input = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine(input);
byte[] message = Encoding.ASCII.GetBytes("ACK: " + input);
stream.Write(message, 0, message.Length);
}
stream.Close();
client.Close();
listener.Stop();
}
}
}
在运行以上这两个示例代码时,首先启动服务器端,然后再启动客户端。当客户端启动后,就可以在控制台中输入所需发送的消息,服务端会回复收到的信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# .NET中Socket简单实用框架的使用教程 - Python技术站