本文提供一个完整的TCP Server实例,包括动态连接库、单元测试、验收测试、Winform模拟测试。供新手学习,还望老手多提意见。

项目地址:https://tcpserversocket.codeplex.com/ (可直接Download项目工程)

系统结构

项目文件如下:

TcpServerSocket:项目核心动态链接库,如果在别的项目中使用,只用引用该项目生成的DLL即可;

WindowsFormsApplication1:一个简单的winform应用程序,让你快事了解如何在WinForm中使用;

UnitTestProject:单元测试;

AcceptanceTest:验收测试,模拟高速连接断开的客户端,快速数据发送。

项目的核心是使用TcpListener进行监听,使用NetworkStream进行TCP数据流读写。服务器的核心原理如下图:

系统测试

WindowsFormsApplication1 + 网络调试助手测试效果:

WindowsFormsApplication1 + AcceptanceTest效果:

如何使用

可以在你的项目中添加生成的TcpServerSocket.dll,然后简单几句代码就可以开启TCP Server之旅!

 var tcp = new TcpServer
{
RecvNewClientAction = handler => Debug.WriteLine("recv new client: " + handler),
LostClientAction = handler => Debug.WriteLine("lost client :" + handler),
RecvDataAction = (ip, data, len) => Debug.WriteLine("{0}:{1}", ip, Encoding.ASCII.GetString(data, , len)),
ListenPort =
};
tcp.StartListen();

后续开发

程序主要一个问题是处理断网、客户端程序突然崩溃等非正常断线情况。本来是想在程序中加心跳处理,但这样的话就增加了程序的复杂性。希望各位大大们指点迷津!

基于多线程的TCP服务器项目【开源】的更多相关文章

  1. 基于多线程的TCP socket通信经典案例

    服务器端 package com.thinkvenus.study.socket; import java.io.BufferedReader; import java.io.IOException; ...

  2. Socket Server-基于NIO的TCP服务器

    NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候, ...

  3. 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)

    NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候, ...

  4. 【Java TCP/IP Socket】基于线程池的TCP服务器(含代码)

    了解线程池 在http://blog.csdn.net/ns_code/article/details/14105457(读书笔记一:TCP Socket)这篇博文中,服务器端采用的实现方式是:一个客 ...

  5. 高性能、高并发TCP服务器(多线程调用libevent)

    from:http://blog.csdn.net/i_am_jojo/article/details/7587838 本文讲述的TCP服务器是模仿memcache中的TCP网络处理框架,其中是基于l ...

  6. 前端开发的使用服务器环境开源项目 D2Server 可替代Apache

    推荐一个前端开发的使用服务器环境开源项目 D2Server 可替代Apache   攻欲善其事,必先利其器.前端开发,编辑器我们有了Sublime Text2,配置Server环境用……你可能会选择A ...

  7. 推荐前端开发使用的服务器环境开源项目 D2Server 可替代Apache

    攻欲善其事,必先利其器.前端开发,编辑器我们有了Sublime Text2,配置Server环境用……你可能会选择Apache,为什么呢?因为能供选择的选项实在太少.而现在,我向大家推荐一个针对前端开 ...

  8. Java编程实现多线程TCP服务器完整实例

    Socket ·功能:TCP客户端套接字 ·构造方法:   Socket(InetAddress address, int port)   创建一个流套接字并将其连接到指定 IP 地址的指定端口号 · ...

  9. 基于多进程和基于多线程服务器的优缺点及nginx服务器的启动过程

    基于多进程服务器的优点: 1.由操作系统进行调度,运行比较稳定强壮 2.能够方便地通过操作系统进行监控和管理 例如对每个进程的内存变化状况,甚至某个进程处理什么web请求进行监控.同时可以通过给进程发 ...

随机推荐

  1. js 倒计时

    /** * 启动,秒杀倒计时. time格式:DDHH24MISS 例如: time="11223344"; * */function timer(time) { var d = ...

  2. oracle普通表转分区表(在线重定义方式)

    1.1.TAB_TAOBAO_BILL 1.1.1检查下这张表是否可以在线重定义,无报错表示可以,报错会给出错误信息: exec dbms_redefinition.can_redef_table(' ...

  3. MSSQL2005后版本插入数据返回ID的新写法

    例子: INSERT VolunteerSound_Table (Title,ArticleContent)OUTPUT Inserted.ID VALUES ('FirstVal','bbbbb') ...

  4. sql语句,怎么取查询结果的位置

    SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分.这个函数的名称在不同的资料库中不完全一样: MySQL: SUBSTR( ), SUBSTRING( ) Oracle: S ...

  5. 使用GizwitsOpenAPI,快速开发轻应用

    导读:使用机智云提供的Open API(Http / WebSocket),可以快速开发网页或微信应用等基于html的轻应用,用于管理和控制智能设备.机智云 Open API 主要帮助开发者通过 HT ...

  6. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

  7. Liquid Exception: Included file '_includes/customizer-variables.html' not found in assets/bootstrap/docs/customize.html 解决方案

    执行下面这句话即可 rm -rf source/assets/bootstrap/docs/

  8. Codeforces Round #258 (Div. 2)

    A - Game With Sticks 题目的意思: n个水平条,m个竖直条,组成网格,每次删除交点所在的行和列,两个人轮流删除,直到最后没有交点为止,最后不能再删除的人将输掉 解题思路: 每次删除 ...

  9. 网站常用UI整理

    1.UI插件包使用   Bootstrap 地址:http://v3.bootcss.com/getting-started/     Bootstrap buttons 按钮 地址:http://w ...

  10. 【BZOJ】3996: [TJOI2015]线性代数

    题意 给出一个\(N \times N\)的矩阵\(B\)和一个\(1 \times N\)的矩阵\(C\).求出一个\(1 \times N\)的01矩阵\(A\),使得\[ D = ( A * B ...