C#TCP

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(); 
        
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值