首页 > 编程语言 >C# socket 短连接

C# socket 短连接

时间:2022-10-28 17:05:17浏览次数:43  
标签:Console socket C# bytes System using 连接 客户端


直接上代码吧。这个短连接客户端只能发一次消息哦:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using ClientModel;
using LaserGate.common;

namespace LaserGate
{
public class TCPD
{
public void StartTCPVideo() {

Boolean running = true;
//============================================================================//
// 1、socket服务地址和监听端口
//============================================================================//
// socket服务地址
string host = "127.0.0.1";
// socket服务端口
int port = 8090;
// 将将IP地址字符串转换为IPAddress对象
IPAddress ip = IPAddress.Any;
// 终结点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、与客户端交互
//============================================================================//
while (running)
{
Socket remote = server.Accept();
Console.WriteLine("客户端连接 . . . ");
// 接收客户端消息
Receive(remote);
// 发送给客户端消息
Send(remote);
}

//============================================================================//
// 4、关闭服务
//============================================================================//
if (server != null)
{
server.Close();
server = null;
}

Console.WriteLine("ok");
Console.ReadKey(true);
}

static void Receive(Socket socket)
{
try
{
byte[] bytes = new byte[1024];
//从客户端接收消息
int len = socket.Receive(bytes, bytes.Length, 0);
//将消息转为字符串
string recvStr = Encoding.ASCII.GetString(bytes, 0, len);
Console.WriteLine("接收的客户端消息 : {0}", recvStr);
getVideoData(recvStr);
}
catch (Exception ex) {
Console.WriteLine(ex.ToString());
}
}

static void Send(Socket socket)
{
string sendStr = "ok";
Console.WriteLine("发送给客户端消息 : {0}", sendStr);
// 将字符串消息转为数组
byte[] bytes = Encoding.ASCII.GetBytes(sendStr);
//发送消息给客户端
socket.Send(bytes, bytes.Length, 0);
}


private static void getVideoData(string result) {
#region 业务


if (result.Split(',').Length > 0)
{
try
{
string[] arr = result.Split(',');
FaceRecognitionInfo faceRecognition = new FaceRecognitionInfo();
string personName = arr[6].ToString().Trim();
faceRecognition.cardId = personName.Substring(0,5).Trim();
faceRecognition.videoIp = "";
int resultAdd = ClientDAL.FaceRecognitionDAL.addFaceRecognitionLog(faceRecognition);
if (resultAdd == 1)
{
//service.Send(System.Text.Encoding.UTF8.GetBytes("ok"));
}
else
{
Log4netHelper.Error("插入识别到脸部信息失败:" + result);
}
}
catch (Exception ex)
{
Log4netHelper.Error("解析人脸识别数据失败:" + result + " " + ex.ToString());
}

}
#endregion
}

}
}

 

标签:Console,socket,C#,bytes,System,using,连接,客户端
From: https://blog.51cto.com/51souta/5805152

相关文章

  • C#判断集合中的数据中字段的值是否都等于true
    若集合中的数据有多个字段,判断某个字段的数据的值是否都等于true。加一个数值计算列表中的个数,每判断完一项,其数值加一,当数值达到列表中数据的个数时,就判断完成了。例如:......
  • C# 从死磕到精通系列 string 类型
    首先看下string类型支持的常见方法:像:1.ToString将其他类型转换为string类型。null不可转。(据说现在最新版可以支持了)    2.Split  根据指定字符切换字符串返......
  • C# webAPI +access+xadmin+layui 前端
    1.首先创建webAPI项目: 2.创建DAL类库,用户访问数据库。添加AccessHelper封装一个数据库访问类:usingSystem;usingSystem.Collections.Generic;usingSystem.Data;using......
  • 本地MSSQL2008数据库连接服务器上的MSSQL2008数据库
    一、基础环境这里对于MSSQL2008的安装步骤不再做介绍,只描述【本地MSSQL2008数据库如何连接服务器上的MSSQL2008数据库】服务器端数据库操作步骤开始:开始菜单->所有程序-......
  • 通过抹黑java等其他语言提升C# 存在感?NO NO
    今天在写业务的时候突然看到了以前封装的java库里关于java时间格式化的代码。感觉到了深深的恶意感。来一起看下java的: 还有一个合并后后的再来看一个golang的 Golang格......
  • C# UpdClient 发送16进制
    C#如何发送已知"77852563821574"这样的16进制?publicstaticbyte[]HexStringToBytes(stringhs){string[]strArr=hs.Trim(......
  • MHATC系统笔记2
    Tip:1、修改FDO.jar解决导入长期计划时,如果航路为空导入不成功问题;原来的代码是有条件删除长期计划历史库中的数据,导致从长期计划向长期计划历史库中转存数据时两个表中存在......
  • 问题定位记录1:Djano-redis库报错No connection available
    一、问题现象MANO(网络管理与编排软件)原子层创建资源后写redis缓存时报错Noconnectionavaiable堆栈打印:Traceback(mostrecentcalllast): File"/home/oes/.loca......
  • Flutter开发之Scaffold组件快速开发APP
    Scaffold包括的属性constScaffold({Key?key,PreferredSizeWidget?appBar,Widget?body,Widget?floatingActionButton,FloatingActionButtonLocation?floatingAct......
  • 智能分析网关使用教程:如何在EasyCVR视频融合平台配置告警与抓拍?
    AI智能分析网关设备内置多种深度学习算法,可支持对接入的多路视频流进行智能检测、智能识别等,包括人脸检测与识别、车辆检测与识别、车牌识别、烟火识别、安全帽识别、区域入......