TCPClient
TCPClient 类提供了一种使用 TCP 协议连接到某个端点的简化方法。它还通过 NetworkStream
对象展现在连接过程中读取或写入的数据。
请参见下面从 QuickStart 文档中摘录的日期/时间客户机示例。
使用 C# 编写
using
System;
using
System.Net;
using
System.Net.Sockets;
using
System.IO;
using
System.Text;
class
Client
{
public
static
void
Main(String[] args)
{
TCPClient tcpc =
new
TCPClient();
Byte[] read =
new
Byte[32];
if
(args.Length != 1)
{
Console.WriteLine(“请在命令行中指定服务器名称”);
return
;
}
String server = args[0];
// 验证服务器是否存在
if
(DNS.GetHostByName(server) ==
null
)
{
Console.WriteLine(“找不到服务器:” + 服务器);
return
;
}
// 尝试连接到服务器
if
(tcpc.Connect(server, 13) == -1)
{
Console.WriteLine(“无法连接到服务器:” + 服务器);
return
;
}
// 获取流
Stream s = tcpc.GetStream();
// 读取流并将它转换为 ASCII 码形式
int
bytes = s.Read(read, 0, read.Length);
String Time = Encoding.ASCII.GetString(read);
// 显示数据
Console.WriteLine(“已接收到的” + 字节 + “字节”);
Console.WriteLine(“当前日期和时间是:” + 时间);
tcpc.Close();
}
}
TCPListener
TCPListener 类便于在来自某个客户机的 TCP 连接的特定套接字上进行侦听的工作。
请参见下面包括在 QuickStart 文档中的日期/时间服务器示例。
使用 C# 编写
using
System;
using
System.Net;
using
System.Net.Sockets;
using
System.Text;
class
Server
{
public
static
void
Main()
{
DateTime now;
String strDateLine;
Encoding ASCII = Encoding.ASCII;
// 在端口 13 进行侦听
TCPListener tcpl =
new
TCPListener(13);
tcpl.Start();
Console.WriteLine(“正在等待客户进行连接”);
Console.WriteLine(“请按 Ctrl+c 退出...”);
while
(
true
)
{
// 接收会阻塞,直到有人连接上
Socket s = tcpl.Accept();
// 获取当前的日期和时间并将它连接成一个字符串
now = DateTime.Now;
strDateLine = now.ToShortDateString() +
" "
+
now.ToLongTimeString();
// 将该字符串转换成一个字节数组并发送它
Byte[] byteDateLine =
ASCII.GetBytes(strDateLine.ToCharArray());
s.Send(byteDateLine, byteDateLine.Length, 0);
Console.WriteLine(“发送” + strDateLine);
}
}
}
这个似乎是FTP下载的:
#region "Download: File transfer FROM ftp server"
/// <summary>
/// Copy a file from FTP server to local
/// </summary>
/// <param name="sourceFilename">Target filename, if required </param>
/// <param name="localFilename">Full path of the local file </param>
/// <returns> </returns>
/// <remarks>Target can be blank (use same filename), or just a filename
/// (assumes current directory) or a full path and filename </remarks>
public
bool
Download(
string
sourceFilename,
string
localFilename
,
bool
PermitOverwrite)
{
//2. determine target file
FileInfo fi =
new
FileInfo(localFilename);
return
this
.Download(sourceFilename, fi, PermitOverwrite);
}
//Version taking an FtpFileInfo
public
bool
Download(FtpFileInfo file,
string
localFilename
,
bool
permitOverwrite)
{
return
this
.Download(file.FullName, localFilename
, permitOverwrite);
}
//Another version taking FtpFileInfo and FileInfo
public
bool
Download(FtpFileInfo file, FileInfo localFI
,
bool
permitOverwrite)
{
return
this
.Download(file.FullName, localFI
, permitOverwrite);
}
//Version taking string/FileInfo
public
bool
Download(
string
sourceFilename, FileInfo targetFI
,
bool
permitOverwrite)
{
//1. check target
if
(targetFI.Exists && !(permitOverwrite))
{
throw
(
new
ApplicationException(
"Target file already exists"
));
}
//2. check source
string
target;
if
(sourceFilename.Trim() ==
""
)
{
throw
(
new
ApplicationException(
"File not specified"
));
}
else
if
(sourceFilename.Contains(
"/"
))
{
//treat as a full path
target = AdjustDir(sourceFilename);
}
else
{
//treat as filename only, use current directory
target = CurrentDirectory + sourceFilename;
}
string
URI = Hostname + target;
//3. perform copy
System.Net.FtpWebRequest ftp = GetRequest(URI);
//Set request to download a file in binary mode
ftp.Method = System.Net.WebRequestMethods.Ftp.DownloadFile;
ftp.UseBinary =
true
;
//open request and get response stream
using
(FtpWebResponse response = (FtpWebResponse)ftp.GetResponse())
{
using
(Stream responseStream = response.GetResponseStream())
{
//loop to read & write to file
using
(FileStream fs = targetFI.OpenWrite())
{
try
{
byte
[] buffer =
new
byte
[2048];
int
read = 0;
do
{
read = responseStream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, read);
}
while
(!(read == 0));
responseStream.Close();
fs.Flush();
fs.Close();
}
catch
(Exception)
{
//catch error and delete file only partially downloaded
fs.Close();
//delete target file as it's incomplete
targetFI.Delete();
throw
;
}
}
responseStream.Close();
}
response.Close();
}
return
true
;
}
#endregion
似乎是发送MAIL的
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Net.Mail;
using
System.Diagnostics;
namespace
MailTest
{
class
Program
{
static
void
Main(
string
[] args)
{
Encoding encoding = Encoding.GetEncoding(
"GB2312"
);
MailAddress from =
new
MailAddress(
"youmailname@163.com"
,
"19850101"
, encoding);
MailAddress to =
new
MailAddress(
"youmailname@163.com"
);
MailMessage mail =
new
MailMessage(from, to);
mail.Subject =
"test"
;
mail.Body =
"hello world"
;
mail.SubjectEncoding = encoding;
mail.BodyEncoding = encoding;
SmtpClient smtp =
new
SmtpClient(
"smtp.163.com"
);
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials =
true
;
smtp.Credentials
=
new
System.Net.NetworkCredential(
"rjgcwwdz@163.com"
,
"19850101"
);
smtp.Send(mail);
}
}
}
类似QQ通讯:
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Net;
using
System.IO;
using
System.Net.Sockets;
using
System.Threading;
namespace
MyQQSer
{
class
Serv
{
private
TcpListener listenr;
private
Thread thread;
private
bool
isClose =
false
;
//结束程序是退出循环
private
Socket[] sock =
new
Socket[50];
public
Serv()
{
Listener();
}
~Serv()
{
isClose =
true
;
for
(
int
i = 0; i < sock.Length; i++)
{
if
(sock[i] !=
null
)
sock[i].Close();
listenr.Stop();
}
}
/// <summary>
/// 开始监听端口
/// </summary>
public
void
Listener()
{
if
(listenr ==
null
)
listenr =
new
TcpListener(IPAddress.Parse(
"127.0.0.1"
), 5000);
listenr.Start();
if
(thread ==
null
)
thread =
new
Thread(
new
ThreadStart(ReciverMessage));
thread.IsBackground =
true
;
thread.Start();
}
/// <summary>
/// 接收数据
/// </summary>
private
void
ReciverMessage()
{
int
count;
//可用套结字索引
count = GetCount();
bool
loop =
true
;
if
(count == -1)
loop =
false
;
if
(loop)
{
while
(
true
)
{
// 判断是否退出循环
if
(isClose)
break
;
sock[count] = listenr.AcceptSocket();
Thread t =
new
Thread(
new
ThreadStart(ReciverMessage));
t.IsBackground =
true
;
t.Start();
// 接受客户端数据
while
(
true
)
{
byte
[] buffs =
new
byte
[100];
if
(sock[count].Connected)
{
try
{
sock[count].Receive(buffs);
string
message = Encoding.Default.GetString(buffs);
Console.WriteLine(message);
SendToAll(buffs);
}
catch
(Exception ex)
{
}
}
}
}
}
Thread.CurrentThread.Abort();
}
// 得到可用套结字索引
private
int
GetCount()
{
for
(
int
i = 0; i < sock.Length; i++)
if
(sock[i] ==
null
)
return
i;
return
-1;
}
// 发送消息给所有人
private
void
SendToAll(
byte
[] buff)
{
for
(
int
i = 0; i < sock.Length; i++)
{
if
(sock[i] !=
null
)
{
if
(sock[i].Connected)
{
sock[i].Send(buff);
}
}
}
}
}
}
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
using
System.Net.Sockets;
using
System.Net;
using
System.Threading;
using
System.IO;
namespace
TestClient
{
public
partial
class
Form1 : Form
{
private
TcpClient client;
private
Thread t;
private
Socket sock;
private
bool
close =
false
;
public
Form1()
{
InitializeComponent();
}
// 连接
private
void
btnConnect_Click(
object
sender, EventArgs e)
{
if
(client ==
null
)
client =
new
TcpClient(
new
IPEndPoint(IPAddress.Parse(
"127.0.0.1"
)
,
int
.Parse(txtLoalPort.Text)));
if
(t ==
null
)
t =
new
Thread(
new
ThreadStart(ReciverMessage));
t.IsBackground =
true
;
t.Start();
btnSend.Enabled =
true
;
btnConnect.Enabled =
false
;
}
// 接收消息
private
void
ReciverMessage()
{
client.Connect(IPAddress.Parse(txtSerIP.Text)
,
int
.Parse(txtSerPort.Text));
while
(
true
)
{
if
(close)
break
;
//NetworkStream nws = client.GetStream();
//StreamReader sr = new StreamReader(nws);
//string message = sr.ReadToEnd();
//sr.Close();
if
(sock ==
null
)
sock = client.Client;
byte
[] buff =
new
byte
[100];
sock.Receive(buff);
string
message = Encoding.Default.GetString(buff);
this
.lstMessage.Items.Add(message);
}
Thread.CurrentThread.Abort();
}
// 发送消息
private
void
btnSend_Click(
object
sender, EventArgs e)
{
string
message =
this
.txtInput.Text;
byte
[] buff = Encoding.Default.GetBytes(message);
sock.Send(buff);
txtInput.Text =
""
;
}
private
void
Form1_FormClosing(
object
sender, FormClosingEventArgs e)
{
close =
true
;
sock.Close();
}
}
}