使用C#的Socket实现最简单的TCP通信示例代码
2024-09-07
15
使用C#实现TCP通信有多个类可以使用,最简单的是直接使用TcpListener+TcpClient类,但有时候这两个类并不方便做更底层的一些配置。而使用Socket类可以做一些比较底层的TCP配置。这里给出使用Socket实现最简单的TCP通信示例代码。、
相关说明
IPAddress addr = IPAddress.Parse(“127.0.0.1”);
System.Net.IPAddress,IP地址的对象表示方法,将字符串IP地址转换为IPAddress实例。
IPEndPoint ipe = new IPEndPoint(addr, 21000);
System.Net.IPEndPoint,表示一个特定的IP地址和端口的组合,socket绑定等使用,是IP地址和端口被成对处理的对象。
AddressFamily.InterNetwork
System.Net.Sockets.AddressFamily是枚举,InterNetwork表示使用IP V4版本的地址进行通信。
SocketType.Stream
System.Net.Sockets.SocketType是枚举,Stream表示基于字节流,不重复数据的双向通信,使用TCP传输控制协议。
Sockert服务端的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace tcp_server
{
class Program
{
static void Main(string[] args)
{
//============================================================================//
// 1、服务监听地址和端口
//============================================================================//
string host = 127.0.0.1;
// 端口号
int port = 8081;
// 将IP地址字符串转换为IPAddress对象
IPAddress ip = IPAddress.Parse(host);
// IP EndPoint
IPEndPoint ipe = new IPEndPoint(ip, port);
//============================================================================//
// 2、创建socket服务端并监听端口
//============================================================================//
//创建TCP Socket对象
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定EndPoint对象(地址)
server.Bind(ipe);
//开始监听
server.Listen(0);
Console.WriteLine(已经处于监听状态,等待客户端连接 . . . );
//============================================================================//
// 3、等待客户端连接,并得到连接的Socket
//============================================================================//
Socket remote = server.Accept();
Console.WriteLine(客户端建立连接 . . . );
byte[] bytes = new byte[1024];
//从客户端接收消息
int len = remote.Receive(bytes, bytes.Length, 0);
//将消息转为字符串
string recvStr = Encoding.ASCII.GetString(bytes, 0, len);
Console.WriteLine(接收的客户端消息 : {0}, recvStr);
string sendStr = Response from server!;
Console.WriteLine(发送消息给客户端 : {0}, sendStr);
// 将字符串消息转为字节数组
bytes = Encoding.ASCII.GetBytes(sendStr);
//发送消息给客户端
remote.Send(bytes, bytes.Length, 0);
//============================================================================//
// 4、关闭服务端的监听
//============================================================================//
if (server != null)
{
server.Close();
server = null;
}
Console.WriteLine(Press any key to continue . . . );
Console.ReadKey(true);
}
}
}
Socket客户端的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace tcp_client
{
class Program
{
static void Main(string[] args)
{
//============================================================================//
// 1、服务端地址
//============================================================================//
string hostAddr = 127.0.0.1;
int port = 8081;
// 将IP地址字符串转换为IPAddress对象
IPAddress ip = IPAddress.Parse(hostAddr);
// 创建终结点EndPoint
IPEndPoint ipe = new IPEndPoint(ip, port);
//============================================================================//
// 2、创建socket连接客户端
//============================================================================//
// 创建Socket并连接到服务器
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 连接到服务器
client.Connect(ipe);
string sendStr = I am a Client!;
Console.WriteLine(发送消息给服务端 : {0}, sendStr);
// 将字符串消息转为字节数组
byte[] bytes = Encoding.ASCII.GetBytes(sendStr);
//发送消息给客户端
client.Send(bytes, bytes.Length, 0);
bytes = new byte[1024];
//从客户端接收消息
int len = client.Receive(bytes, bytes.Length, 0);
//将消息转为字符串
string recvStr = Encoding.ASCII.GetString(bytes, 0, len);
Console.WriteLine(接收到的服务端响应的消息 : {0}, recvStr);
//============================================================================//
// 4、关闭连接
//============================================================================//
if (client != null)
{
client.Close();
client = null;
}
Console.WriteLine(Press any key to continue . . . );
Console.ReadKey(true);
}
}
}
运行结果
以上两个代码,分别建立两个控制台的项目,使用.net framework 4.0及以上的版本即可正常编译,运行结果如下:
服务端:
客户端:
赞一波!
相关文章
- 春节代码 新年快乐html 灯笼js
- C#12最新语法糖示例
- 圣诞树代码 下雪
- TP6.0 搜索器使用示例
- 表白代码,爱心树html
- .NET Core连接和操作MongoDB用法示例
- .NET跨进程通信的实现方式
- C#修改注册表信息示例
- git pull 从远程获取代码并合并本地的版本
- vscode中自动将json格式的内容自动生成对应的代码
- 代码写得好 在哪里都能蹦迪
- C#检测网络端口是否被占用的参考代码
- vscode打开代码中文显示乱码的问题
- 自定义事件子组件与父组件通信
- Vue 父子组件通信传值(子组件中使用父组件中的数据)
- HTML-CSS-JS Prettify 代码格式化插件
- Layui 数据表格方法渲染中的复杂表头简单使用示例
- 对于初学者来说,有哪些好的 Python 示例?
- 有没有一个在线工具可以将Python代码转换为Java代码?
- 为什么C代码比Python代码运行得更快?
文章评论
全部评论