您的位置:首页 > 理论基础 > 计算机网络

基于IHttpAsyncHandler的TCP收发器

2013-10-28 16:28 288 查看
上一篇文章中,我们提到使用IHttpAsyncHandler来进行UDP的收发操作。由于UDP模型比较简单,所以运行没什么问题。这一篇我主要是使用IHttpAsyncHandler来进行TCP的收发操作。由于TCP的模型比较复杂,所以在设计的时候,稍微麻烦了一些。

核心讲解

首先,我贴上代码,然后来逐一讲解:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Server.aspx.cs" Inherits="SocketViaWeb.Server" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>TCP服务器端</title>
<style type="text/css">
body
{
font-size:12px;
}
</style>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#btnListen").bind("click", function () {
//setInterval(TriggerAjax, 1000);
TriggerAjax();
});
});

var array = new Array();

var TriggerAjax = function () {
var port = $("#txtPort").val();
$.ajax({
type: "GET",
url: "AsyncSocketHandler.ashx?port=" + port,
dataType: "text",
success: function (result) {
if (result != "") {
var myDate = new Date();
var message = myDate.toLocaleString() + " : " + result;
if (!array.contains(result)) {
$("#msg").append(message).append("<br>");
}
}
TriggerAjax();  //循环调用
},
error: function (result) {
TriggerAjax();  //循环调用
}
});
}

Array.prototype.contains = function (elem) {
for (var i = 0; i < this.length; i++) {
if (this[i] == elem) {
return true;
}
}
return false;
}

</script>
</head>
<body>
<div style="height: 390px; width: 435px;float:left;border:1px solid #B7D6BF;">
<div style="height:30px;width:100%;float:left;background:url('images/navEx.gif') repeat-x;line-height:30px;text-align:center;"><strong>服务端接收数据</strong></div>
<div style="float:left;width:100%;height:310px;border-bottom:1px solid #B7D6BF; overflow-x:auto;" id="msg"></div>
<div style="float:left;width:100%;height:50px;text-align:right;line-height:50px;">
绑定的本机端口:<input id="txtPort" type="text" style="width:40px;border:none;border-bottom:1px solid black;" value="10004" />
<input id="btnListen" type="button" value="监听" style="border:none;background:url('images/btn.gif') no-repeat;width:50px;height:20px;color:White;" />
<input id="btnStop" type="button" value="停止" style="border:none;background:url('images/btn.gif') no-repeat;width:50px;height:20px;color:White;" onclick="return btnStop_onclick()" />
</div>
</div>
</body>
</html>


View Code
实现效果

最后看看我们实现的效果吧:



源码下载

点击这里下载源码

由于源码中有SignalR的示例,附件过大,我已经删除了相关的Signr附件,编译的时候,请首先运行 Install-Package Microsoft.AspNet.SignalR -version 1.0

来获取相关的版本。我百度网盘放了全版本的:http://pan.baidu.com/s/15SDGG

解决方案中的SocketViaWeb项目下的Server.aspx 为服务端,Client.aspx为客户端。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: