zoukankan
html css js c++ java
封装的一个套接字服务端
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Net.Sockets;
using
System.Threading;
namespace
EarlyServer
{
public
class
ConnectClient : IDisposable
{
Member
#region
Member
private
Socket m_Socket;
private
string
m_NetWorkName;
private
Thread m_Thread;
private
bool
disposed
=
false
;
private
bool
m_IsRuning
=
false
;
public
event
CommandReceiveEventHandler CommandReceived;
#endregion
public
ConnectClient(Socket socket,
string
netWorkName)
{
m_Socket
=
socket;
m_NetWorkName
=
netWorkName;
}
Public Methods
#region
Public Methods
public
void
Start()
{
m_Socket
=
new
Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
m_Thread
=
new
Thread(
new
ThreadStart(ThreadFunction));
m_Thread.IsBackground
=
true
;
m_Thread.Start();
}
#endregion
Private Methods
#region
Private Methods
private
void
ThreadFunction()
{
m_IsRuning
=
true
;
while
(m_IsRuning)
{
byte
[] byteMessage
=
null
; ;
string
tmpStr
=
string
.Empty;
while
(ServiceStartFlag)
{
try
{
if
(m_Socket.Connected)
{
byteMessage
=
new
byte
[
1000
];
int
len
=
m_Socket.Receive(byteMessage);
if
(len
>
0
)
{
tmpStr
=
Encoding.UTF8.GetString(byteMessage);
if
(tmpStr.Length
>
0
)
{
string
[] ary
=
tmpStr.Split(
'
|
'
);
if
(ary.Length
>
3
)
{
//
命令|发送者|目标|内容
MsgCommand cmd
=
new
MsgCommand(ary[
0
], ary[
1
], ary[
2
], tmpStr.Replace(ary[
0
]
+
"
|
"
+
ary[
1
]
+
"
|
"
+
ary[
2
]
+
"
|
"
,
""
));
this
.OnCommandReceived(
this
,
new
CommandEventArgs(cmd));
}
}
}
}
}
catch
(SocketException ex)
{
m_IsRuning
=
true
;
ClientData.List.Remove(m_NetWorkName);
}
}
}
}
#endregion
event Methods
#region
event Methods
private
void
OnCommandReceived(
object
sender, CommandEventArgs e)
{
if
(CommandReceived
!=
null
)
{
CommandReceived(
this
, e);
}
}
#endregion
IDisposable 成员
#region
IDisposable 成员
public
void
Dispose()
{
Dispose(
true
);
GC.SuppressFinalize(
this
);
}
protected
virtual
void
Dispose(
bool
disposing)
{
if
(
!
this
.disposed)
{
this
.Close();
//
注意这里不是线程安全的
}
disposed
=
true
;
}
public
void
Close()
{
if
(disposed)
{
m_IsRuning
=
false
;
m_Thread.Abort();
}
MsgCommand cmd
=
new
MsgCommand(CommandType.Outing,
this
.m_ServerIPAddress,
this
.m_NetWorkName);
this
.SendToServer(cmd);
this
.m_Socket.Close();
this
.m_NetworkStream.Close();
}
~
ConnectClient()
{
Dispose(
false
);
}
#endregion
}
public
class
ClientData
{
public
static
Dictionary
<
string
, ConnectClient
>
List
=
new
Dictionary
<
string
, ConnectClient
>
();
}
public
delegate
void
CommandReceiveEventHandler(
object
sender, CommandEventArgs eventArgs);
public
class
CommandEventArgs : EventArgs
{
private
MsgCommand m_MsgCommand;
public
MsgCommand Command
{
get
{
return
m_MsgCommand; }
}
public
CommandEventArgs(MsgCommand msgCommand)
{
this
.m_MsgCommand
=
msgCommand;
}
}
public
class
MsgCommand
{
private
string
commnadString;
/**/
///
<summary>
///
发送者名称
///
</summary>
public
string
CommnadString
{
get
{
return
commnadString; }
set
{ commnadString
=
value; }
}
private
string
senderName;
/**/
///
<summary>
///
发送者名称
///
</summary>
public
string
SenderName
{
get
{
return
senderName; }
set
{ senderName
=
value; }
}
private
string
targetName;
/**/
///
<summary>
///
目标名称
///
</summary>
public
string
TargetName
{
get
{
return
targetName; }
set
{ targetName
=
value; }
}
private
string
commandBody;
/**/
///
<summary>
///
内容
///
</summary>
public
string
MetaData
{
get
{
return
commandBody; }
set
{ commandBody
=
value; }
}
Constructors
#region
Constructors
public
MsgCommand(
string
commnadstring,
string
sendername,
string
targetName,
string
metaData)
{
this
.commnadString
=
commnadstring;
this
.senderName
=
sendername;
this
.commandBody
=
metaData;
this
.targetName
=
targetName;
}
#endregion
}
}
查看全文
相关阅读:
Thread的第四天学习
Thread的第三天学习
Thread的第二天学习
Thread的第一天学习
hibernate的简单学习(第一天)
【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .
MySql学习
sqlserver 数据库隔离级别,数据库死锁
高并发操作同一条数据,更新丢失数据问题(重复转账,票超卖,订单扣库存问题)
T4
原文地址:https://www.cnblogs.com/skyblue/p/1525892.html
最新文章
MapReduce(四)
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
MapReduce(三)
CompareTo 基于的排序算法
MapReduce- 数据的排序处理
MapReduce(二)
MapReduce--平均分,最高,低分以及及格率的计算
MapReduce(一)
fatal: refusing to merge unrelated histories
4.2 执行环境和作用域
热门文章
JavaScript闭包 vs java static
4.1 变量
js控制去掉字符串头尾空格
3.7 函数
变量提示,函数提升
3.6语句
div垂直水平居中
样式加载顺序
jqurey源码解析
Thread的第五天学习
Copyright © 2011-2022 走看看