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();
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;
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)
{
FileInfo fi = new FileInfo(localFilename);
return this.Download(sourceFilename, fi, PermitOverwrite);
}
public bool Download(FtpFileInfo file, string localFilename
, bool permitOverwrite)
{
return this.Download(file.FullName, localFilename
, permitOverwrite);
}
public bool Download(FtpFileInfo file, FileInfo localFI
, bool permitOverwrite)
{
return this.Download(file.FullName, localFI
, permitOverwrite);
}
public bool Download(string sourceFilename, FileInfo targetFI
, bool permitOverwrite)
{
if (targetFI.Exists && !(permitOverwrite))
{
throw (new ApplicationException("Target file already exists"));
}
string target;
if (sourceFilename.Trim() == "")
{
throw (new ApplicationException("File not specified"));
}
else if (sourceFilename.Contains("/"))
{
target = AdjustDir(sourceFilename);
}
else
{
target = CurrentDirectory + sourceFilename;
}
string URI = Hostname + target;
System.Net.FtpWebRequest ftp = GetRequest(URI);
ftp.Method = System.Net.WebRequestMethods.Ftp.DownloadFile;
ftp.UseBinary = true;
using (FtpWebResponse response = (FtpWebResponse)ftp.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
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)
{
fs.Close();
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;
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();
}
}
}