using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Socket测试代码
{
public partial class Form1 : Form
{
List<Socket> ClientProxSocketList = new List<Socket>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 启动服务端
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
//1、创建Socket对象
// 地址族:IPV4 套接字类型:流式 协议:TCP
Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//2、绑定监听端口
socket.Bind(new IPEndPoint(IPAddress.Parse(textBox1.Text),int.Parse(textBox2.Text)));
//3、设置监听队列
socket.Listen(10);
//4、循环等待客户端连接,这是第一次使用线程池,线程池中无限循环等待连接
ThreadPool.QueueUserWorkItem(new WaitCallback(AcceptClientConnect),socket);
}
//第四步线程池中的委托方法
//传入服务器的socket对象
public void AcceptClientConnect(object socket)
{
var serverSocket = socket as Socket;
this.AppendTextToTextLog("服务器端开始接受客户端连接。");
//Socket serverSocket = (Socket)socket;
while(true)
{
//调用Accept方法等待客户端的连接
//连接后返回一个socket对象表示该次连接
Socket proxSocket = serverSocket.Accept();
this.AppendTextToTextLog(string.Format("客户端:{0}链接上了",proxSocket.RemoteEndPoint.ToString()));
//将连接放入数组,因为可能有多个客户端与服务器进行连接,需要对他们都进行保存,以后调用的时候更方便。
ClientProxSocketList.Add(proxSocket);
//对于刚刚建立起来的连接,不停地接收当前连接的客户端发来的消息,这是第二次使用线程池,线程池中无限循环接收信息
ThreadPool.QueueUserWorkItem(new WaitCallback(ReceiveData), proxSocket);
}
}
/// <summary>
/// 还是那个面方法线程池中调用的委托方法
/// 接收客户端的消息
/// </summary>
/// <param name="socket"></param>
public void ReceiveData(object socket)
{
//转换类型
var peoxSocket = socket as Socket;
byte[] data = new byte[1024*1024];
while(true)
{
int len = 0;
try
{
len = peoxSocket.Receive(data, 0, data.Length, SocketFlags.None);
}
catch(Exception ex)
{
//异常退出
AppendTextToTextLog(string.Format("客户端:{0}非正常退出", peoxSocket.RemoteEndPoint.ToString()));
ClientProxSocketList.Remove(peoxSocket);
return; //让方法结束,终结当前客户端数据的异步线程
}
//把接收到的数据放到界面上
string str = Encoding.Default.GetString(data,0,len);
//接收到结束信息
if(len<=0)
{
//客户端正常退出
AppendTextToTextLog(string.Format("客户端:{0}正常退出", peoxSocket.RemoteEndPoint.ToString()));
//移除列表中的客户端连接
ClientProxSocketList.Remove(peoxSocket);
return; //让方法结束,终结当前客户端数据的异步线程
}
//接收到正常信息
AppendTextToTextLog(string.Format("接收到客户端:{0}的消息是:{1}",peoxSocket.RemoteEndPoint.ToString(),str));
}
}
public void AppendTextToTextLog(string text)
{
if (textLog.InvokeRequired)
{
textLog.Invoke(new Action<string>(s => {
this.textLog.Text = string.Format("{0}\r\n{1}", s, textLog.Text);
}), text);
} else
{
this.textLog.Text = string.Format("{0}\r\n{1}",text,textLog.Text);
}
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
foreach (var proxSocket in ClientProxSocketList)
{
//先判断是否处于连接状态
if(proxSocket.Connected)
{
byte[] data = Encoding.Default.GetBytes(textBox4.Text);
proxSocket.Send(data,0,data.Length,SocketFlags.None);
}
}
}
}
}
相关推荐
C# Socket通信从入门到精通(2)——多个同步TCP客户端C#代码实现(史上最全)
本文详细介绍了Socket通信中多个同步Tcp客户端功能的实现、主要是介绍如何使用多个客户端与多个服务器进行数据的交互,包含连接服务器、断开服务器、发送数据、读取数据、C#代码实现,由高级工程师多年经验总结而成,绝对干货!
C# Socket TCP客户端代码
using System; using System.Net; using System.Net.Sockets; using System.Text; namespace TCP客户端 { class Program { static void Main(string[] args) { Socket tcpClient ...
C# Socket通信从入门到精通(4)——多个异步TCP客户端C#代码实现(史上最全)
本文详细介绍了Socket通信中多个异步Tcp客户端功能的实现、并在异步连接时通过传入一个委托来举例说明异步连接时如何执行除了连接服务器之外的方法,以及介绍如何使用多个客户端与多个服务器进行数据的交互,包含连接服务器、断开服务器、发送数据、读取数据、C#代码实现,由高级工程师多年经验总结而成,绝对干货!
C# TCP 服务端与客户端代码分析与补充
本文分析了基于Socket的TCP通信程序改进方案。原始代码存在资源释放不全、数据接收不完整、异常处理不足等问题。改进后的服务端采用固定缓冲区接收数据,完善了多客户端管理和双向通信功能;客户端增加了消息接收和断线重连机制。关键技术点包括:1)使用Task.Run实现异步通信;2)通过CancellationTokenSource控制任务取消;3)采用线程锁保证多线程安全;4)固定缓冲区确保数据完整性。改进后的程序实现了更健壮的TCP通信,支持完善的多客户端管理、双向消息传输和异常处理,提升了用户体验和系统稳
C# Socket通信从入门到精通(5)——单个同步TCP服务器监听一个客户端C#代码实现(史上最全)
本文详细介绍了Socket通信中单个同步Tcp服务器功能的实现、以及介绍了服务器如何实现客户端的反复连接、断开,并介绍如何使用务器与客户端进行数据的交互,包含客户端的监听、发送数据、读取数据、C#代码实现,由高级工程师多年经验总结而成,绝对干货!
C# Socket通信从入门到精通(1)——单个同步TCP客户端C#代码实现(史上最全)
本文详细介绍了Socket通信中同步Tcp客户端功能的实现、包含连接服务器、断开服务器、发送数据、读取数据、C#代码实现,由高级工程师多年经验总结而成,绝对干货!
C# TCP 服务端、客户端代码
1.服务端代码 public Socket newsock; //声明一个Socket实例 public Socket server1; public Socket Client; public delegate void MyInvoke(string str); public IPEndPoint localEP; public int localPort; public EndPoint ...
C# Socket通信从入门到精通(3)——单个异步TCP客户端C#代码实现(史上最全)
本文详细介绍了Socket通信中异步Tcp客户端功能的实现、包含连接服务器、断开服务器、发送数据、读取数据、C#代码实现,由高级工程师多年经验总结而成,绝对干货!
C# TCP通信实战:服务端与客户端代码解析
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。监听指定端口,等待客户端连接。连接到服务端,发送数据并接收响应。类可以快速实现服务端与客户端的通信。
C# Socket通信从入门到精通(21)——Tcp客户端判断与服务器断开连接的三种方法以及C#代码实现
我们开发的tcp客户端程序在连接服务器以后,经常会遇到服务器已经关闭但是作为客户端的我们不知道,这时候应该应该有一个机制我们可以实时监测客户端和服务器已经断开连接,如果已经断开了连接,我们应该及时报警提示用户客户端和服务器已经断开连接,本文介绍三种可以监测客户端已经与服务器断开连接的方法,并介绍三种方法分别适用于哪种业务场景。
C#开发Modbus TCP客户端:从协议详解到代码实战
工业自动化中,上位机与PLC、仪表通信常基于Modbus TCP协议。理解其报文结构(MBAP头、PDU)和功能码(03/04)是开发可靠客户端的基础。借助C#与NModbus库或手写Socket,可实现寄存器读写、浮点转换及断线重连。该技术价值在于高效采集设备数据,应用于产线监控、MES系统等场景。本文基于C#给出从最小实现到多设备轮询的方案,并解析字节序、批量上限等常见坑。
代码篇C#网络编程之tcp同步客户端
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.W
C#实现Modbus TCP客户端:从报文结构到完整代码实战
在工业自动化领域,上位机与PLC等设备之间的数据交互是常见需求。Modbus TCP作为工业以太网最具通用性的协议,凭借简单、开放的特点,成为设备通信的首选方案。理解其报文结构(MBAP头+PDU)和功能码机制,是开发稳定客户端的基础。通过C#中的TcpClient,开发者可以手动构造读取保持寄存器的请求,并处理字节序、字序等关键细节,实现灵活可靠的数据采集。此类技术广泛应用于设备监控、数据采集、远程运维等场景,掌握其原理能有效解决现场通信中的各种问题。本文从协议原理出发,结合实战经验,完整呈现基于C#的M
C TCP客户端源代码
C# TCP客户端源代码 去发现同类优质开源项目:https://gitcode.com/ 描述 本资源文件提供了一个C#编写的TCP客户端源代码。该代码实现了一个简单的TCP客户端,能够连接到指定的服务器IP和端口,并进行数据的发送和接收。代码使用了Windows Forms来创建用户界面,方便用户输入服务器IP和端口号,并显示接收到的消息。 功能特点 TCP连接:客户端能够连接到指定的服务器...
从零到一:揭秘BlueROV2机械爪背后的Pixhawk舵机控制艺术
本文详细解析了如何基于Pixhawk飞控系统为BlueROV2水下机器人构建可靠的舵机控制系统。从硬件选型、ArduSub固件配置到供电安全与故障排除,全面揭秘机械爪背后的控制艺术,为水下机器人爱好者提供实用指南。
深度解读扫地机器人的导航原理
科技改变生活,不可否认科技的进步的确为我们的生活带来许多便捷,以智能家电为例,智能电饭煲、智能洗碗机、智能扫地机等产品已逐渐成为家庭的一分子,其中以扫地机表现最为抢眼。能做到智能规划清扫,收割了不少家庭主妇及科技爱好者的芳心。但扫地机并非一开始就这么智能,最初的扫地机只能做到随机式清扫,会频繁出现碰撞现象。 近年来,通过业界的不断努力,目前,扫地机器人已告别乱碰乱撞现象,能做到自主路径...
C#实现TCP客户端和服务端源代码
方便调试,编写的一个TCP调试工具;支持多连接V4和V6
最新版谷歌浏览器Axure插件(免翻墙)
本文介绍了在Chrome浏览器无法直接打开Axure导出HTML文件的解决方法。由于国内网络限制无法访问Chrome商店,需手动下载安装AxureRP扩展插件(提供百度网盘下载链接)。安装步骤包括:1)启用开发者模式;2)拖拽CRX文件或加载解压文件夹;3)勾选"允许访问文件网址"。同时还提示若浏览器版本过低可能无法正常运行,并给出了浏览器升级方法。该教程详细说明了从插件安装到浏览器升级的完整解决方案。
C# 高并发高性能socket源代码。 包括tcp客户端和服务器端,udp客户端和服务器端
此代码属于上层代码,主要应用于大批量物联网项目,mes系统及游戏服务器,不建议初级拿后,中级可以买来学学。它用于物联网行业.mes系统以及大型集控设备有非常大的支持。包括tcp客户端和服务器端,udp客户端和服务器端。C# 高并发高性能socket源代码。所有都包括socket流控制。
TSMaster MBD模块实战:如何用Simulink模型快速搭建汽车电子测试环境
本文实战演示了如何利用TSMaster的MBD模块,将Simulink模型快速部署为汽车电子自动化测试环境的核心。通过建立模型与TSMaster系统变量的实时数据通道,并利用数据仓库统一数据定义,工程师能无缝连接算法仿真与真实总线网络,显著提升从模型到HIL测试的验证效率。
OpenCV安装配置教程VS2022(超级顺利)
博主最开始没打算写这篇博客,只是想简单的在网上找一下最新版的OpenCV的安装配置教程,适用于VS2022的,但是我搜了一早上,也没搜到一个能让我成功安装配置的,看了很多很多文章,根本就没有几篇有用的。所以没办法了,只能自己研究了,于是就整理了这篇博客,希望能帮到和我一样的人,这就是博主一直信奉的利他精神!
第6章第4节:自定义分词器
本节详解Elasticsearch自定义分词器,解析analyzer三段式结构(char_filter→tokenizer→filter),掌握常用组件如ik_max_word、synonym_graph、ngram等。通过_analyze API调试分词效果,实现“索引时扩展同义词、搜索时不带”的生产级方案,提升中文搜索与智能提示体验。
Python爬虫:如何抓取亚马逊商品评论和评分
通过本文的学习,您已经掌握了如何使用Selenium爬取亚马逊商品的评论数据,并处理反爬虫机制。特别是在亚马逊这样的大型电商平台,商品评论和评分不仅能够反映产品的质量和顾客的体验,还可以对商家进行竞争分析。通过爬取亚马逊的商品评论,您可以获得有价值的市场信息,如产品的优缺点、消费者的反馈等。通过查看源代码,您可以发现,亚马逊的商品评论和评分数据往往通过JavaScript动态加载,这也意味着在抓取时需要使用Selenium或Playwright等工具来模拟浏览器加载。亚马逊的评论页面支持分页加载。
1916



被折叠的 条评论
为什么被折叠?



