首页 / C# / C# Socket实战源码
C# Socket实战源码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# Socket实战源码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3047字,纯文字阅读大概需要5分钟。
内容图文
![C# Socket实战源码](/upload/InfoBanner/zyjiaocheng/618/650b53019e094145b65717dd871b1751.jpg)
目录
1. 相关类描述
1.1 类IPEndPoint
- 是抽象类EndPoint的实现类
- Socket对象的RemoteEndPoint、LocalEndPoint都是这个类型
- 属性Address:使用IPv4表示的地址
- 属性Port:使用int表示的端口
1.2 类Socket
- 这个类既可以用于服务器端的开发,也可以用于客户端的开发;
- 构造方法:
- 参数AddressFamily:指定使用IPv4的地址InterNetwork;
- 参数SocketType:指定使用流式传输Stream;
- 参数ProtocolType:指定协议类型Tcp;
- 方法Bind():绑定IP与端口,这样就成了服务器,可以监听指定IP的特定端口;
- 方法Listen():置于监听状态,参数是最大的挂起数。
- 方法Accept():接收客户端连接,返回Socket对象,这个方法会阻塞当前线程,建议开启新线程执行该方法,结合尾递归,这样就可以接收多个客户端;
- 方法Receive():接收客户端发送过来的消息,以字节为单位进行操作,此方法会阻塞当前线程,建议开启新线程执行该方法,结合尾递归,这样就可以接收多条信息;
- 方法Send():发送消息,以字节为单位。
2. 源码:
主程序源码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClientTest
{
class Program
{
static void Main(string[] args)
{
ClientControl client = new ClientControl();
// 用于测试的服务器地址和端口
client.Connect("222.186.174.9", 57404);
Console.WriteLine("请输入要发送的内容,输入quit退出");
string msg = Console.ReadLine();
while (msg != "quit")
{
client.Send(msg);
msg = Console.ReadLine();
}
Console.ReadKey();
}
}
}
客户端控制类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ClientTest
{
/// <summary>
/// 客户端控制类
/// </summary>
public class ClientControl
{
private Socket clientSocket;
public ClientControl()
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
/// <summary>
/// 连接
/// </summary>
/// <param name="ip">服务器地址</param>
/// <param name="port">服务器端口</param>
public void Connect(string ip, int port)
{
clientSocket.Connect(ip, port);
Console.WriteLine("连接服务器成功!");
Thread threadReceive = new Thread(Receive);
threadReceive.IsBackground = true;
threadReceive.Start();
}
/// <summary>
/// 接收服务器发送的字符
/// </summary>
private void Receive()
{
while (true)
{
try
{
byte[] msg = new byte[1024];
int msgLen = clientSocket.Receive(msg);
Console.WriteLine("服务器发送:" + Encoding.UTF8.GetString(msg, 0, msgLen));
}
catch (Exception ex)
{
Console.WriteLine("服务器积极拒绝");
break;
}
}
}
/// <summary>
/// 发送UTF8编码字符
/// </summary>
/// <param name="msg"></param>
public void Send(string msg)
{
clientSocket.Send(Encoding.UTF8.GetBytes(msg));
}
}
}
3. 测试验证
3.1 测试环境搭建
第一步:搭一个穿透,模拟一个远程服务器,不清楚的小伙伴,具体请参考博文:强烈推荐!内网穿透工具——Sakura Frp
第二步:准备一个网络调试小助手,不清楚的小伙伴,具体请参考博文:网络调试助手使用
第三部:测试,通过网络调试助手发送:“123456789”,然后观察控制台是否收到。
点击发送:
可以看到,客户端收到了服务端的发送。
参考资料
【1】传智播客,C#开发教程
【2】【Linux开发初步】00000021H_Linux网络编程——Socket
【3】一文搞懂HTTP、Socket和TCP
内容总结
以上是互联网集市为您收集整理的C# Socket实战源码全部内容,希望文章能够帮你解决C# Socket实战源码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。