设为首页
加入收藏
站内地图
旧版入口
首 页
新闻资讯
SEO研究
SEO查询
网站运营
站长学院
赚钱联盟
链接交换
下载中心
搜优客论坛
网页制作
网络编程
数据库
图形图像
操作系统
网络应用
当前位置:
首页
>
站长学院
>
网络编程
>
ASP.NET
Socket异步编程-之服务器端
作者:
佚名
出处:
网络转载
时间:
08-10
点击:
内容载入中...
您的支持我们的动力 吴龙杰
1
using
System;
2
using
System.Text;
3
using
System.Threading;
4
using
System.Net.Sockets;
5
using
System.Net;
6
namespace
asyncSocketServer {
7
8
class
SocketListener {
9
System.Threading.ManualResetEvent allDone
=
new
ManualResetEvent(
false
);
10
[STAThread]
11
static
void
Main(
string
[] args) {
12
SocketListener server
=
new
SocketListener();
13
server.StartListening();
14
}
15
16
public
void
StartListening() {
17
IPHostEntry ipHostInfo
=
Dns.Resolve(Dns.GetHostName());
18
IPEndPoint localEP
=
new
IPEndPoint(ipHostInfo.AddressList[
0
],
11000
);
19
Console.WriteLine(
"
Local address and pot:{0}
"
,localEP.ToString());
20
Socket listener
=
new
Socket(AddressFamily.InterNetwork,
21
SocketType.Stream,ProtocolType.Tcp);
22
try
{
23
listener.Bind(localEP);
24
listener.Listen(
10
);
25
while
(
true
) {
26
allDone.Reset();
27
Console.WriteLine(
"
Waiting for a connection
"
);
28
listener.BeginAccept(
new
AsyncCallback(acceptCallback),listener);
29
allDone.WaitOne();
//
阻塞主线程
30
}
31
}
32
catch
(Exception ex) {
33
Console.WriteLine(ex.ToString());
34
}
35
Console.WriteLine(
"
Closing the Listener
.
"
);
36
}
37
38
public
void
acceptCallback(IAsyncResult ar) {
39
Socket listener
=
(Socket)ar.AsyncState;
40
Socket handler
=
listener.EndAccept(ar);
41
//
设置主线程继续
42
allDone.Set();
43
StateObject state
=
new
StateObject();
44
state.workSocket
=
handler;
45
handler.BeginReceive(state.buffer,
0
,StateObject.BufferSize,
0
,
46
new
AsyncCallback(readCallback),state);
47
}
48
49
public
void
readCallback(IAsyncResult ar) {
50
StateObject state
=
(StateObject)ar.AsyncState;
51
Socket handler
=
state.workSocket;
52
int
read
=
handler.EndReceive(ar);
53
if
(read
>
0
) {
54
state.sb.Append(Encoding.ASCII.GetString(state.buffer,
0
,read));
55
handler.BeginReceive(state.buffer,
0
,StateObject.BufferSize,
0
,
56
new
AsyncCallback(readCallback),state);
57
}
58
else
{
59
if
(state.sb.Length
>
1
) {
60
string
content
=
state.sb.ToString();
61
Console.WriteLine(
"
Read {0} bytes from socket.\n Data:{1}
"
,
62
content.Length,content);
63
}
64
handler.Close();
65
}
66
}
67
}
68
69
public
class
StateObject {
70
public
Socket workSocket
=
null
;
71
public
const
int
BufferSize
=
1024
;
72
public
byte
[] buffer
=
new
byte
[BufferSize];
73
public
StringBuilder sb
=
new
StringBuilder();
74
}
75
}
76
收藏本文:
【
大
中
小
】【
打印页面
】【推荐给朋友】【
关闭窗口
】
<< 上一篇 :
用批处理编译*.sln工程
>> 下一篇 :
Socket异步编程-之客户器端
相关新闻
·
ASP.NET 2.0服务器控件之验证控件示例(1)
·
ACCESS在Web.config 里设置连接字符串
·
理解IIS7的用户和组
·
在ASP.NET AJAX中别使用mode="Legacy"
·
asp.net图片加水印
·
asp.net中上传大文件
·
asp.net中使用JMail发邮件
·
学习PetShop3.0(1)用户登陆(SignIn.aspx
最新资讯
·
ASP.NET、JSP及PHP之间的抉择
·
带你走进ASP.NET(1)
·
带你走进ASP.NET(2)
·
ASP.NET效率陷阱之——Attributes
·
ASP.NET技巧:DataGrid传统分页方式
·
asp.NET自定义服务器控件内部细节
·
ASP.NET 2.0高级数据处理之数据绑定
·
ASP.NET立即上手教程(1)
站长学院
[
ASP
]
[
PHP
]
[
JSP
]
[
CGI/perl
]
[
ASP.NET
]
[
C#
]
[
XML
]
[
编程综合
]
关 键 字:
信息分类:
新闻资讯
SEO研究
网站运营
站长学院
下载中心
推荐信息
本类热点
·
ASP.NET网站开发实用代码
·
类型“GridView”的控件“GridVi
·
用window.location.href实现刷新
·
asp.net的Request对象使用方法
·
Community Server系列之十:让CS
·
ASP.net数据库连接程序实例
·
用ASP.NET开发wap的开发心得
·
.net2.0邮件发送代码
·
三层嵌套gridview 的折叠展开
·
asp.net图片加水印