C〓TcpClientネットワークプログラミング転送ファイルの例


一、簡単に述べる
C〓TcpClientを利用してLAN内でファイルを転送しますが、ファイルが反対側に発送される時はファイルの名前を変えます。ファイル名と一緒に送ってもいいですか?
二、内容

上述したように、ファイル名のキャロルの長さの値の文字ストリーム(このファイル名のキャロル長の値は11ビットの文字列で固定されていて、11ビット未満の前の0)とファイル名の文字ストリームを1つのbyte配列に合わせてファイルと反対側に送信します。向こうで受信してファイル名のルーメン長の値を解析し、長さに応じてファイル名を解析してからファイルストリームを取得します。
職務に服する

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace TCPSendFile
{
    public partial class Form1 : Form
    {
        public delegate void TxtReceiveAddContentEventHandler(string txtValue);
        
        public Form1()
        {
            InitializeComponent();
        }
       
        public void TxtAddContent(string txtValue)
        {
            if (textBox1.InvokeRequired)
            {
                TxtReceiveAddContentEventHandler addContent = TxtAddContent;
                textBox1.Invoke(addContent, new object[] { txtValue });
            }
            else
            {
                textBox1.Text = txtValue + "\r
" + textBox1.Text; } } private void button1_Click(object sender, EventArgs e) { TcpListener tcpListener = new TcpListener(IPAddress.Any, 18001); tcpListener.Start(); textBox1.Text = " ..."; Thread thread = new Thread(SendFileFunc); thread.Start(tcpListener); thread.IsBackground = true; } public void SendFileFunc(object obj) { TcpListener tcpListener = obj as TcpListener; while (true) { try { TcpClient tcpClient = tcpListener.AcceptTcpClient(); if (tcpClient.Connected) { NetworkStream stream = tcpClient.GetStream(); string fileName = "testfile.rar"; byte[] fileNameByte = Encoding.Unicode.GetBytes(fileName); byte[] fileNameLengthForValueByte = Encoding.Unicode.GetBytes(fileNameByte.Length.ToString("D11")); byte[] fileAttributeByte = new byte[fileNameByte.Length + fileNameLengthForValueByte.Length]; fileNameLengthForValueByte.CopyTo(fileAttributeByte, 0); // 。 fileNameByte.CopyTo(fileAttributeByte, fileNameLengthForValueByte.Length); // stream.Write(fileAttributeByte, 0, fileAttributeByte.Length); FileStream fileStrem = new FileStream(Application.StartupPath + "\\WebFile\\" + fileName, FileMode.Open); int fileReadSize = 0; long fileLength = 0; while (fileLength < fileStrem.Length) { byte[] buffer = new byte[2048]; fileReadSize = fileStrem.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, fileReadSize); fileLength += fileReadSize; } fileStrem.Flush(); stream.Flush(); fileStrem.Close(); stream.Close(); TxtAddContent(string.Format("{0} ", fileName)); } } catch (Exception ex) { } } } } }
クライアント

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace TCPReceiveFile
{
    public partial class Form1 : Form
    {
        public delegate void TxtReceiveAddContentEventHandler(string txtValue);
        public Form1()
        {
            InitializeComponent();
        }
        public void TxtReceiveAddContent(string txtValue)
        {
            if (txtReceive.InvokeRequired)
            {
                TxtReceiveAddContentEventHandler addContent = TxtReceiveAddContent;
                txtReceive.Invoke(addContent, new object[] { txtValue });
            }
            else
            {
                txtReceive.Text = txtValue + "\r
" + txtReceive.Text; } } private void button1_Click(object sender, EventArgs e) { IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.101"), 18001); TxtReceiveAddContent(" 。。。。。"); Thread th = new Thread(ReceiveFileFunc); th.Start(ipEndPoint); th.IsBackground = true; } private void ReceiveFileFunc(object obj) { IPEndPoint ipEndPoint = obj as IPEndPoint; TcpClient tcpClient = new TcpClient(); try { tcpClient.Connect(ipEndPoint); } catch { TxtReceiveAddContent(" , !"); } if (tcpClient.Connected) { NetworkStream stream = tcpClient.GetStream(); if (stream != null) { byte[] fileNameLengthForValueByte = Encoding.Unicode.GetBytes((256).ToString("D11")); byte[] fileNameLengByte = new byte[1024]; int fileNameLengthSize = stream.Read(fileNameLengByte, 0, fileNameLengthForValueByte.Length); string fileNameLength = Encoding.Unicode.GetString(fileNameLengByte, 0, fileNameLengthSize); TxtReceiveAddContent(" :" + fileNameLength); int fileNameLengthNum = Convert.ToInt32(fileNameLength); byte[] fileNameByte = new byte[fileNameLengthNum]; int fileNameSize = stream.Read(fileNameByte, 0, fileNameLengthNum); string fileName = Encoding.Unicode.GetString(fileNameByte, 0, fileNameSize); TxtReceiveAddContent(" :" + fileName); string dirPath = Application.StartupPath + "\\WebFile"; if(!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } FileStream fileStream = new FileStream(dirPath + "\\" + fileName, FileMode.Create, FileAccess.Write); int fileReadSize = 0; byte[] buffer = new byte[2048]; while ((fileReadSize = stream.Read(buffer, 0, buffer.Length)) > 0) { fileStream.Write(buffer, 0, fileReadSize); } fileStream.Flush(); fileStream.Close(); stream.Flush(); stream.Close(); tcpClient.Close(); TxtReceiveAddContent(" "); } } } } }
実例図


以上はC〓TcpClientネットワークプログラミング転送ファイルの例の詳細です。C〓TcpClient転送ファイルに関する資料は他の関連記事に注目してください。