PDA

View Full Version : سوال: ارسال و دریافت فایل در یک یرنامه



sinaprog
سه شنبه 07 اردیبهشت 1395, 09:10 صبح
سلام من این کد رونوشتم براد ارسال پیام و فایل های خیلی کوچیک هم درست کار میکنه
حالا بافرض اینکه ما تمام آی پی هارو داریم
میخوام برنامم فایل های بزرگتر رو بفرسته
لطفا راهنماییم کنید من هرچی تو سایت های ایرانی وخارجی سرچ کردم دو برنامه کلاینت سروره
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Net;
using System.Net.Sockets;

namespace ServerClient
{
public partial class Form1 : Form
{
public Socket SocClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public Form1()
{
InitializeComponent();
}

public void StartServer()
{
Socket ServerSoc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
this.Invoke((MethodInvoker)delegate
{
ServerSoc.Bind(new IPEndPoint(IPAddress.Any, 5040));
ServerSoc.Listen(1);
});

while (true)
{
Socket ClientSoc = ServerSoc.Accept();
MyClient m = new MyClient();
m.Add(ClientSoc);
Thread tr = new Thread(GetData);
tr.Start(ClientSoc);
}


}

public void GetData(object ObJSoc)
{
Socket Soc = (Socket)ObJSoc;
while (true)
{
byte[] b = new byte[1024];
int r = Soc.Receive(b);
if (r > 0)
{
this.Invoke((MethodInvoker)delegate
{
ListMsg.Items.Add(Encoding.Unicode.GetString(b, 0, r));

});
}
}

}
private void Form1_Load(object sender, EventArgs e)
{
Thread lis = new Thread(new ThreadStart(StartServer));
lis.Start();
SocClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.223.130"), 5040));
Thread.Sleep(10000);
SocClient.Send(Encoding.Unicode.GetBytes("salam"));

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Environment.Exit(Environment.ExitCode);
}
}
}

reza_ali202000
چهارشنبه 08 اردیبهشت 1395, 05:48 صبح
سلام دوست عزیز.
متاسفانه فایل بیشتر از یک مگ رو نمیتونید به این روش بفرستید.
میتونید فایل رو قبل از ارسال بشکنید و بعد بفرسید.توی سرور هم به هم بچسبونید. در واقع پروتوکل udp یا stp رو باید باز سازی کنید.
البته توی framework 4 میتونید از دستور زیر استفاده کنید.
سرور:
var listener = new TcpListener(address, port);
listener.Start();

using (var incoming = listener.AcceptTcpClient())
using (var networkStream = incoming.GetStream())
using (var fileStream = File.OpenWrite(imagePath))
{
networkStream.CopyTo(fileStream);
}

listener.Stop();
کلاینت:
var client = new TcpClient();
client.Connect(address, port);

using (var networkStream = client.GetStream())
using (var fileStream = File.OpenRead(imagePath))
{
fileStream.CopyTo(networkStream);
}

client.Close();
من خودم برا ارسال فیلم های دوربین مدار بسته استفاده میکنم.