c# tcplistener 与 client通信 服务端 今天写一下

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;

namespace GameServer {

    public class EngineUser {
        public string userName;
        public TcpClient Client;
        public StreamWriter Sw;
        public StreamReader Sr;

        public EngineUser(TcpClient client) {
            this.Client = client;
            NetworkStream netStream = client.GetStream();
            Sw = new StreamWriter(netStream, Encoding.UTF8);
            Sr = new StreamReader(netStream, Encoding.UTF8);
            this.userName = "";
        }
    }

    public class AnalysizeEngine : IDisposable {
        #region 多线程 singleton

        private static AnalysizeEngine _instance;
        private static readonly object LockObject = new object();

        public static AnalysizeEngine GetInstance() {
            if (_instance == null) {
                lock (LockObject) {
                    if (_instance == null) _instance = new AnalysizeEngine();
                }
            }
            return _instance;
        }
        #endregion

        #region  私有变量 将engine中的线程全部用变量声明,保存在这里,退出的时候,要全部结束!
        private TcpListener _listener;
        //todo:up not implemented
        #endregion

        #region 构造函数
        public AnalysizeEngine()
            : this("tcp engine") {
        }
        public AnalysizeEngine(String name) { }
        #endregion

        #region 属性事件
        public event HandleOverActionHandler Handle;
        public delegate void HandleOverActionHandler(String message);
        #endregion

        #region 成员方法

        #endregion

        #region 操作方法

        public AnalysizeEngine Start() {
            try {
                if (_listener == null)
                    _listener = new TcpListener(IPAddress.Parse(ConfigHelper.Get("localIp")),
                        Int32.Parse(ConfigHelper.Get("localPort")));
                _listener.Start();
            } catch (Exception ex) {
                LogHelper.Error(ex);
            }
            Thread m = new Thread(() => {
                GetInstance().Process();
            });
            m.Start();
            return this;
        }
        public void Process() {
            while (true) {
                TcpClient guest = _listener.AcceptTcpClient();
                EngineUser u= new EngineUser(guest);

                var thread = new Thread(f => {
                    EngineUser client = f as EngineUser;
                    if (client == null) return;
                    //read line 需要用while true循环!
                    while (true) {
                        string receiveString = client.Sr.ReadLine();
                        if(receiveString==null)return;

                        LogHelper.Info("成功接收:" + receiveString);
                        if (this.Handle != null) Handle(receiveString);
                        try {
                            #region 解析本次定位相关

                            string[] splitString = receiveString.Split(‘,‘);
                            if (!splitString[0].StartsWith("SLC"))
                                throw new ArgumentException("指令没有以SLC开头");
                            String[] parts = receiveString.Split(‘|‘);
                            if (parts.Length < 3) throw new ArgumentException("指令没有以|分隔3部分");
                            var total = parts[0].Length > 2 ? parts[0].Substring(2, parts[0].Length - 2) : "";
                            var verson = parts[2].Split(‘{‘)[0];
                            var data = parts[1];
                            var subDatas = new List<String>();
                            data.Trim(new char[] { ‘{‘, ‘}‘ }).Split(‘>‘).ToList().ForEach(t => {
                                subDatas.Add(
                                    t.TrimStart(
                                        ‘<‘));
                            });
                            u.Sw.WriteLine("过程已处理!");
                            u.Sw.Flush();
                        }

                            #endregion              }

 catch (Exception ex) {
                            LogHelper.Error(ex);
                        }
                    }

                });
                thread.Start(u);
            }
        }
        public AnalysizeEngine Stop() {

            _listener.Stop();
            return this;
        }
        #endregion

        #region IDisposable 成员

        public void Dispose() {
            _listener.Stop();
            _instance = null;
            _listener = null;
        }
        #endregion
    }
}
时间: 2024-11-07 20:49:43

c# tcplistener 与 client通信 服务端 今天写一下的相关文章

警察与小偷的实现之中的一个client与服务端通信

来源于ISCC 2012 破解关第四题 目的是通过逆向police.实现一个thief,可以与police进行通信 实际上就是一个RSA加密通信的样例,我们通过自己编写client和服务端来实现上面的thief和police的功能.. 要通信.这们这次先通过python写出能够进行网络连接的client与服务端.. 服务端代码 #!/usr/bin/env python import SocketServer from time import ctime HOST = '127.0.0.1' P

Android BLE与终端通信(三)——client与服务端通信过程以及实现数据通信

Android BLE与终端通信(三)--client与服务端通信过程以及实现数据通信 前面的终究仅仅是小知识点.上不了台面,也仅仅能算是起到一个科普的作用.而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主从关系的client和服务端了.本文相关链接须要去google的API上查看,须要FQ的 Bluetooth Low Energy:http://developer.android.com/guide/topics/connectivity/bluetooth-le.html 可是我们依旧

linux 网络编程之最简单的tcp通信服务端

编写一个最为简单的tcp通信服务端.代码如下: #include <iostream> #include <cstring> using namespace std; #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <uni

Socket通信服务端和客户端总结

服务端:1.创建一个Socket对象.用来侦听的.2.绑定端口和IP3.开启侦听4.开始接受客户端连接5.创建一个代理通信Socket对象.用来通信的.6.发送消息接收消息7.收到客户端的道别,也会回一个:我也走了8.关闭Socket 客户端:1.创建Socket对象2.连接服务器3.发送消息接受消息4.停止连接服务器和客户端都可以.发消息:我要走了.5.关闭Socket

webservice通信 服务端 客户端简单实现

schema规范中: 1.所有标签和属性都需要有schema文件来定义. 2.所有schema文件都需要有一个唯一标识id,单在xml文件中它叫namespace. 3.namespace的值由targetNamespace属性来指定,它的值是一个url(很可能不存在). 4.如何引入一个schema约束? 1).属性?:用xmlns属性. 2).属性值?:对应schema文件的id即(namespace值). 5.如果引入的schema约束不是w3c提供的,必须指定schema文件的位置. 6

C# Socket服务端与客户端通信(包含大文件的断点传输)

步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收信息   (3)发送数据(这里分发送字符串.文件(包含大文件).震动) 二.客户端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收信息   (3)发送数据(这里分发送

grpc(3):使用 golang 开发 grpc 服务端和client

1,关于grpc-go golang 能够能够做grpc的服务端和client. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://github.com/grpc/grpc-go 和之前写的java的grpcclient调用同样.也须要使用protobuf的配置文件. 可是golang以下的类库很的简单.并且golang的性能也很强悍呢. 有些简单的业务逻辑真的能够使用golang进行开发. 性能强悍并且.消耗的资源也很小. ja

python模拟服务端和客户端通信(简单)

写了一个超级简单的,小白可以看一下,因为自己就是小白白(自学的) 客户端: import socket#指定一个协议tcp/ipclient=socket.socket()#连接一个地址(服务端和端口号)client.connect(('localhost',6969))#发送数据(python默认是byte类型,所以数据前面加b)client.send(b"Hello Word")#把服务端反馈的信息进行接收并赋值,给出一个接收的大小(kb/M)之类的date=client.recv

springboot整合websocket实现客户端与服务端通信

定义 ?WebSocket是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议.此WebSocket API可在用户的浏览器和服务器之间进行双向通信.用户可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器. 它可以让多个用户连接到同一个实时服务器,并通过API进行通信并立即获得响应. 案例介绍 ? 后端在接收到用户新下的订单后,通知到后台系统 服务端代码 pom.xml <dependency> <groupId>org.springframework.boo