socket 异步接收连接和接收数据
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.Windows.Forms; using System.Net.Sockets; using System.Threading; using System.Net; using Newtonsoft.Json; namespace WindowsSocket { public class Msg { public int Flag { get; set; } public string Message { get; set; } } public partial class Form1 : Form { public Form1() { InitializeComponent(); } //如果一次接收不了,会多次进入OnMessage方法解析 byte[] buffer = new byte[1024]; public void OnMessage(IAsyncResult result) { //result.AsyncState 为调用BeginReceive 传递过来的参数 Socket ts = (Socket)result.AsyncState; //获取接收到信息的长度 //int count = ts.EndReceive(result); //result.AsyncWaitHandle.Close(); this.textBox1.Invoke(new EventHandler(delegate { var msg = Encoding.ASCII.GetString(buffer); MessageBox.Show(msg); //var objects = JsonConvert.DeserializeObject<Msg>(msg); //MessageBox.Show(objects.Flag.ToString()); //MessageBox.Show(objects.Message.ToString()); //textBox1.Text += ts.RemoteEndPoint.ToString() + "客户端信息" + Encoding.ASCII.GetString(buffer) + "\r\n"; })); ts.Send(Encoding.ASCII.GetBytes("How are you? I got a message")); //清空数据,重新开始异步接收 //buffer = new byte[buffer.Length]; ts.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnMessage), ts); } /// 异步连接客户端 /// </summary> /// <param name="tcpServer"></param> private void AsynAccept(Socket tcpServer) { tcpServer.BeginAccept(asyncResult => { //取得终端Socket Socket socketAccept = tcpServer.EndAccept(asyncResult); //获取客户端地址信息 if (socketAccept.RemoteEndPoint is IPEndPoint) { //var ss = tcpClient.Receive(buffer); //异步获取数据 socketAccept.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnMessage), socketAccept); //byte[] msg = new byte[tcpServer.ReceiveBufferSize]; //tcpServer.Receive(msg); //textBox1.Invoke(new EventHandler(delegate //{ // textBox1.Text += "客户端信息" + tcpClient.RemoteEndPoint.ToString() + "\r\n"; //})); } //持续监听终端连接 AsynAccept(tcpServer); }, null); } //开启socket服务端 private void button1_Click(object sender, EventArgs e) { Task task = new Task(() => { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8877)); socket.Listen(1111); AsynAccept(socket); }); task.Start(); } } }
socket 异步接收连接和接收数据的更多相关文章
- vlc-android对于通过Live555接收到音视频数据包后的处理分析
通过ndk-gdb跟踪调试vlc-android来分析从连接到RTSP服务器并接收到音视频数据包后的处理过程. 首先,从前面的文章有分析过vlc-android的处理过程通过线程函数Run()(Src ...
- 接收连接basic_socket_acceptor
概述 TCP有一处和UDP不同的地方是TCP是面向连接的,TCP有建立连接.通信.关闭连接的操作,Boost.Asio提供了ip::tcp::acceptor用来接收新的TCP连接,底层由socket ...
- boost的asio接收单路大数据量udp包的方法
开发windows客户端接收RTP视频流,当h264视频达到1080P 60fps的时候,按包来调用recvfrom的函数压力比较大,存在丢包的问题,windows的完成端口的性能效果当然可以解决这个 ...
- c#网络通信框架networkcomms内核解析之六 处理接收到的二进制数据
本文基于networkcomms2.3.1开源版本 gplv3协议 在networkcomms通信系统中,服务器端收到某连接上的数据后,数据会暂时存放在"数据包创建器"(Pack ...
- Request.Form接收不到post数据.
Request.Form接收不到post数据. https://q.cnblogs.com/q/62635/ Content-Type 有没有设置为 application/x-www-form-ur ...
- jQuery提交Json数据到Webservice,并接收返回的Json数据
jQuery ajax webservice:get 和 post 一.GET 方式 客户端 复制代码 代码如下: var data = { classCode: "0001"}; ...
- SpringBoot后台接收前台的字符串数据
需求 将前台传入的字符串数据转为int类型. 操作 在pom.xml中添加引用. <dependency> <groupId>org.apache.commons</gr ...
- Spring Boot之 Controller 接收参数和返回数据总结(包括上传、下载文件)
一.接收参数(postman发送) 1.form表单 @RequestParam("name") String name 会把传递过来的Form表单中的name对应 ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十九):推送avro格式数据到topic,并使用spark structured streaming接收topic解析avro数据
推送avro格式数据到topic 源代码:https://github.com/Neuw84/structured-streaming-avro-demo/blob/master/src/main/j ...
随机推荐
- SCPI 语言简介
电子负载中需要用到,所以记录下.来源是德科技 SCPI(可编程仪器的标准命令)是一种基于 ASCII 的仪器编程语言,供测试和测量仪器使用. SCPI 命令采用分层结构,也称为树系统. 相关命令归组于 ...
- linux多jdk切换环境
临时更改 export JAVA_HOME="/opt/soft/jdk/jdk1.8.0_66" export JRE_HOME="$JAVA_HOME/jre&quo ...
- jquery点击显示或隐藏
点击第一个dd,给第一li添加class,点击第二个dd,给第二个li添加class,以此类推 $(function(){ $("dd > a").click(fun ...
- [Angular] Using Pipe for function memoization
Sometimes we might have some expensive function to calcuate state directly from template: <div cl ...
- 【安卓进阶】Product Flavor基础玩法
在安卓项目开发中,大多时候总是有测试环境.生产环境之类的区别,在不使用Product Flavor时,我们一般都是通过手工改动代码来实现测试环境.生产环境的切换. 这样就造成了项目管理上的不便,频繁的 ...
- 51nod 1488 帕斯卡小三角 斜率优化
思路:斜率优化 提交:\(2\)次 错因:二分写挂 题解: 首先观察可知, 对于点\(f(X,Y)\),一定是由某个点\((1,p)\),先向下走,再向右下走. 并且有个显然的性质,若从\((1,p) ...
- centos 7 yum 安装 mysql glib 安装 mysql
centos 7 YUM 在线安装版 1.wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm 下载 2.rpm ...
- spring boot 对某个接口进行次数限制,防刷。简易版。demo。
一般的项目 如果没有做防刷 容易被人爆接口 或者就是说没有做token防刷过滤. 容易被人用正常的token刷接口.有些token非一次性. 用户登录之后生成token会有一个过期时间,但一般没有做频 ...
- python 小数处理
modf() 分别取整数部分和小数部分 math模块函数import mathn = 3.75print(math.modf(n))>>> (0.75, 3.0)n = 3.25pr ...
- 模板 - 数据结构 - Treap
还有人把Treap叫做树堆的,但是常用名还是叫做Treap的比较多. 不进行任何封装的,带求和操作的,一个节点存放多个元素的最普通的Treap. #include<bits/stdc++.h&g ...