本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和
《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
1、TcpListener类
从 TCP 网络客户端侦听连接。
TcpListener 类提供一些简单方法,用于在阻止同步模式下侦听和接受传入连接请求。可使用
TcpClient
或
Socket
来连接 TcpListener。可使用
IPEndPoint
、本地 IP 地址及端口号或者仅使用端口号,来创建 TcpListener。可以将本地 IP 地址指定为
Any
,将本地端口号指定为 0(如果希望基础服务提供程序为您分配这些值)。如果您选择这样做,可在连接套接字后使用
LocalEndpoint
属性来标识已指定的信息。
Start
方法用来开始侦听传入的连接请求。
Start
将对传入连接进行排队,直至您调用
Stop
方法或它已经完成
MaxConnections
排队为止。可使用
AcceptSocket
或
AcceptTcpClient
从传入连接请求队列提取连接。这两种方法将阻止。如果要避免阻止,可首先使用
Pending
方法来确定队列中是否有可用的连接请求。
调用
Stop
方法来关闭 TcpListener。
2、TcpClient类
为 TCP 网络服务提供客户端连接。
TcpClient 类提供了一些简单的方法,用于在同步阻止模式下通过网络来连接、发送和接收流数据。
为使 TcpClient 连接并交换数据,使用 TCP
ProtocolType
创建的
TcpListener
或
Socket
必须侦听是否有传入的连接请求。可以使用下面两种方法之一连接到该侦听器:
注意:
如果要在同步阻止模式下发送无连接数据报,请使用
UdpClient
类。
图1 基本代码执行结构
3、源代码
(1)服务器端代码
using
System
;
using
System
.
Collections
.
Generic
;
using
System
.
Linq
;
using
System
.
Text
;
using
System
.
IO
;
using
System
.
Net
;
using
System
.
Net
.
Sockets
;
namespace
TcpListenerDemo
class
Program
static
void
Main
(
string
[
]
args
)
TcpListener
server
=
null
;
/* Set the TcpListener (Server) on port 13000. */
Int32
port
=
13000
;
IPAddress
localAddr
=
IPAddress
.
Parse
(
"127.0.0.1"
)
;
/* TcpListener server = new TcpListener(port); -----The old API */
server
=
new
TcpListener
(
localAddr
,
port
)
;
/* Start listening for client requests. */
server
.
Start
(
)
;
/* Buffer for reading data */
Byte
[
]
bytes
=
new
Byte
[
256
]
;
String
data
=
null
;
/* Enter the listening loop. */
while
(
true
)
Console
.
Write
(
"I'm Server,Waiting for a connection... "
)
;
* AcceptTcpClient是一个阻塞型方法,返回用于发送、接收数据的Tcpclient实例。
* You could also user server.AcceptSocket() here.
TcpClient
client
=
server
.
AcceptTcpClient
(
)
;
Console
.
WriteLine
(
"Connected!"
)
;
data
=
null
;
/* 获取一个stream对象来做reading和writing操作 */
NetworkStream
stream
=
client
.
GetStream
(
)
;
int
i
;
/* Loop to receive all the data sent by the client. */
while
(
(
i
=
stream
.
Read
(
bytes
,
0
,
bytes
.
Length
)
)
!
=
0
)
/* Translate data bytes to a ASCII string. */
data
=
System
.
Text
.
Encoding
.
ASCII
.
GetString
(
bytes
,
0
,
i
)
;
Console
.
WriteLine
(
"Received From Client: {0}\n"
,
data
)
;
/* Process the data sent by the client. */
data
=
data
.
ToUpper
(
)
;
byte
[
]
msg
=
System
.
Text
.
Encoding
.
ASCII
.
GetBytes
(
data
)
;
/* Send back a response. */
stream
.
Write
(
msg
,
0
,
msg
.
Length
)
;
Console
.
WriteLine
(
"Server Sent Back: {0} Server\n"
,
data
)
;
/* Shutdown and end connection */
client
.
Close
(
)
;
catch
(
SocketException
e
)
Console
.
WriteLine
(
"SocketException: {0}"
,
e
)
;
finally
/* Stop listening for new clients. */
server
.
Stop
(
)
;
Console
.
WriteLine
(
"\nHit enter to continue..."
)
;
Console
.
Read
(
)
;
(2)客户端代码
using
System
;
using
System
.
Collections
.
Generic
;
using
System
.
Linq
;
using
System
.
Text
;
using
System
.
IO
;
using
System
.
Net
;
using
System
.
Net
.
Sockets
;
namespace
TcpClientDemo
class
Program
static
void
Connect
(
String
server
,
String
message
)
* Create a TcpClient.
* Note, for this client to work you need to have a TcpServer
* connected to the same address as specified by the server, port
* combination.
Int32
port
=
13000
;
TcpClient
client
=
new
TcpClient
(
server
,
port
)
;
/* Translate the passed message into ASCII and store it as a Byte array. */
Byte
[
]
data
=
System
.
Text
.
Encoding
.
ASCII
.
GetBytes
(
message
)
;
// Get a client stream for reading and writing.
// Stream stream = client.GetStream();
NetworkStream
stream
=
client
.
GetStream
(
)
;
/* Send the message to the connected TcpServer. */
stream
.
Write
(
data
,
0
,
data
.
Length
)
;
Console
.
WriteLine
(
"Sent: {0}"
,
message
)
;
// Receive the TcpServer.response.
/* Buffer to store the response bytes. */
data
=
new
Byte
[
256
]
;
/* String to store the response ASCII representation. */
String
responseData
=
String
.
Empty
;
/* Read the first batch of the TcpServer response bytes. */
Int32
bytes
=
stream
.
Read
(
data
,
0
,
data
.
Length
)
;
responseData
=
System
.
Text
.
Encoding
.
ASCII
.
GetString
(
data
,
0
,
bytes
)
;
Console
.
WriteLine
(
"Received from Server: {0}"
,
responseData
)
;
/* Close everything. */
stream
.
Close
(
)
;
client
.
Close
(
)
;
catch
(
ArgumentNullException
e
)
Console
.
WriteLine
(
"ArgumentNullException: {0}"
,
e
)
;
catch
(
SocketException
e
)
Console
.
WriteLine
(
"SocketException: {0}"
,
e
)
;
Console
.
WriteLine
(
"\n Press Enter to continue..."
)
;
Console
.
Read
(
)
;
static
void
Main
(
string
[
]
args
)
while
(
true
)
Connect
(
"127.0.0.1"
,
"This is send from client"
)
;
4、 执行过程
图4-1 服务器启动
图4-2 客户端启动
图4-3 服务器接收到客户端请求
图4-4 双方互发
5、工程源码及相关附件
TcpClientDemo.rar
TcpListenerDemo.rar
看CSharp tcp通讯类mindmap.rar