免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C# TcpListener和TcpClient的應用

C# TcpListener和TcpClient的應用

(2013-01-14 10:33:06)
標簽:

雜談

//服務器端程序
using System.IO;
using System.Net.Sockets;
using System.Net;
namespace PictureServer
{
    class Program
    {
       static void Main(string[] args)
       {
//在本機創(chuàng)建一個TcpListener,端口是8888,
          TcpListener listener = new TcpListener(IPAddress.Any, 8888);
//開始監(jiān)聽,
          listener.Start();
//循環(huán),等待客戶端連接
           while(true)
           {

              const int bufferSize =256;
//接受客戶端的連接,利用client保存連接的客戶端
              TcpClient client =listener.AcceptTcpClient();
//獲取客戶端的流stream
              NetworkStream clientStream =client.GetStream();
              byte[] buffer = newbyte[bufferSize];
              int readBytes = 0;
//將客戶端流讀入到buffer中
              readBytes =clientStream.Read(buffer, 0, bufferSize);
//將從客戶端流讀取的數(shù)據(jù)保存到字符串request中
              string request =Encoding.ASCII.GetString(buffer).Substring(0, readBytes);
//如果客戶端的命令以LIST開頭,
              if(request.StartsWith("LIST"))
              {
                 // LIST request - return list
//利用類PictureHelper的函數(shù)GetFileListBytes,獲取圖片文件列表
                 byte[] responseBuffer =PictureHelper.GetFileListBytes();
//將服務器獲取的圖片文件列表寫入到clientStream中
                 clientStream.Write(responseBuffer, 0,responseBuffer.Length);
              }
//如果客戶端的請求命令以FILE開頭,即獲取單個圖片文件
              else if(request.StartsWith("FILE"))
              {
              // FILE request - returnfile
                 // get the filename
//獲取請求的文件名字
                 string[] requestMessage =request.Split(':');
                 string filename = requestMessage[1];
//利用File.ReadAllBytes函數(shù)將文件里面的文件filename讀入到字節(jié)數(shù)組data中,             
    byte[] data =File.ReadAllBytes(Path.Combine(@"C:Documents andSettingsAdministratorMy DocumentsMy Pictures", filename));
                 // Send the picture to the client.
//將data中的文件內容寫入到客戶端clientStream中,傳回客戶端
                 clientStream.Write(data, 0, data.Length);
              }
//關閉客戶端流
              clientStream.Close();
           }
       }
//靜態(tài)類PictureHelper,
       public static class PictureHelper
       {
//提供文件夾中的文件列表
           publicstatic string[] GetFileList()
           {
              string[] files =Directory.GetFiles(@"C:Documents and SettingsAdministratorMyDocumentsMy Pictures");
//去掉文件夾路徑,只保留文件名
              // Remove the directory pathfrom the filename.
              for (int i = 0; i <files.Length; i++)
              {
                 files[i] = Path.GetFileName(files[i]);
              }
              return files;
           }
//將文件filename的內容讀到字節(jié)數(shù)組中
           publicstatic byte[] GetPictureBytes(string filename)
           {
              FileInfo fileInfo = newFileInfo(filename);
              byte[] buffer = newbyte[fileInfo.Length];
              using (FileStream stream =fileInfo.OpenRead())
              {
                 stream.Read(buffer, 0, buffer.Length);
              }
              return buffer;
           }

           publicstatic byte[] GetFileListBytes()
           {
              // LIST request - returnlist
              string[] files =PictureHelper.GetFileList();
              StringBuilder responseMessage= new StringBuilder();
              foreach (string s infiles)
              {
                 responseMessage.Append(s);
                 responseMessage.Append(":");
              }
              byte[] responseBuffer =Encoding.ASCII.GetBytes(
             responseMessage.ToString());
              return responseBuffer;
           }
       }
    }
}
 
//////客戶端程序
using System.Net;
using System.Net.Sockets;
using System.IO;
 
       private void buttonListPictures_Click(objectsender, EventArgs e)
       {
           const intbufferSize = 4096;
           // Connectto the server.
//生成一個TcpClinet
           TcpClientclient = new TcpClient();
//生成服務器的IPHostEntry,因為我的服務器和客戶端在同一臺計算機上,所以此處用localhost,實際應用中,此處的localhost應用用服務器的ip地址代替,
          IPHostEntry host = Dns.GetHostEntry("localhost");
// 連接到服務器的8888端口
 client.Connect(host.AddressList[0],8888);
           // Send arequest to the server.
//創(chuàng)建一個NetworkStream,  
        NetworkStream clientStream =client.GetStream();
//request是"LIST"         
          stringrequest = "LIST";
//將request放入到字節(jié)數(shù)組requestBuffer中
           byte[]requestBuffer = Encoding.ASCII.GetBytes(request);
//將請求寫入到NetworkStream中,發(fā)送到服務器端
          clientStream.Write(requestBuffer, 0, requestBuffer.Length);
//獲取服務器端的回應
           // Readthe response from the server.
           byte[]responseBuffer = new byte[bufferSize];
//生成一個內存流memstream
          MemoryStream memStream = new MemoryStream();
           intbytesRead = 0;
           do
           {
//將網絡流中的數(shù)據(jù)按256字節(jié)一組的順序寫入到memStream中
           bytesRead= clientStream.Read(responseBuffer, 0, bufferSize);
          memStream.Write(responseBuffer, 0, bytesRead);
           } while(bytesRead > 0);
          clientStream.Close();
          client.Close();
//從內存流讀取數(shù)據(jù)
           byte[]buffer = memStream.GetBuffer();
           stringresponse = Encoding.ASCII.GetString(buffer);
//將服務器返回的文件列表分解開,文件名保存到字符串數(shù)組fileName中         
           string[]fileNames = response.Split(':');
//將字符串數(shù)組填到ListBox中
          this.listFiles.DataSource = fileNames;
       }
 
//獲取單個圖片文件,并顯示之    
       private void buttonGetPicture_Click(objectsender, EventArgs e)
       {
           const intbufferSize = 4096;
           TcpClientclient = new TcpClient();
          IPHostEntry host = Dns.GetHostEntry("localhost");
          client.Connect(host.AddressList[0],8888);
          NetworkStream clientStream = client.GetStream();
           try
           {
//生成請求,以FIlE:開頭,后接在listbox中選擇的文件名
              string request = "FILE:" +this.listFiles.SelectedItem.ToString();
              byte[] requestBuffer =Encoding.ASCII.GetBytes(request);
//將請求寫入到clientStream中,發(fā)送到服務器端
             clientStream.Write(requestBuffer, 0, requestBuffer.Length);
              byte[] responseBuffer = newbyte[bufferSize];
         
          MemoryStream memStream = new MemoryStream();
           intbytesRead = 0;
           do
           {
//獲取服務器端的回應,
              bytesRead =clientStream.Read(responseBuffer, 0, bufferSize);
//服務器的回應寫入到memStream
             memStream.Write(responseBuffer, 0, bytesRead);
           } while(bytesRead > 0);
          clientStream.Close();
          client.Close();
 //從內存流中讀取圖片文件數(shù)據(jù),顯示在picturebox控件上    
          pictureBox.Image = Image.FromStream(memStream);
       }
       catch (Exception exce)
       {
          MessageBox.Show(exce.Message);
       }
       }
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C# TcpClient網絡編程傳輸文件(帶文件名)
C# 實現(xiàn)基本的套接字TCP通信
[C# 網絡編程系列]自定義Web服務器
C# TCP通訊示例
C# Tutorial
C#線程系列講座(3):線程池和文件下載服務器
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服