Другие языки программирования и технологии

C# Visual 2010 Express --> Как отправить информацию с одного компьютера на другой НЕ в локальной сети?

Как средствами "C#" передать текстовую информацию (возможно, txt файлы) между двумя НЕ локальными компьютерами?
Слышал, что-то из этой области: сокеты, потоки.. .
Набросал что-то по-быстрому, но не работает даже в локалке.. .
-----------------------------
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.Net;
using System.Net.Sockets;

namespace Danchik_s_Progs
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

TcpListener tcplistener;
TcpClient tcpclient, tcpsender;
NetworkStream readstream, writestream;
StreamReader reader;
StreamWriter writer;
String str;

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
tcplistener = new TcpListener(IPAddress.Loopback, Convert.ToInt32(textBox1.Text));
tcplistener.Start();
backgroundWorker1.RunWorkerAsync();
button1.Enabled = false;
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
tcpclient = tcplistener.AcceptTcpClient();
readstream = tcpclient.GetStream();
reader = new StreamReader(readstream);
str = reader.ReadToEnd();
reader.Close();
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
listBox1.Items.Add(str);
backgroundWorker1.RunWorkerAsync();
}

private void button2_Click(object sender, EventArgs e)
{
tcpsender = new TcpClient();
tcpsender.Connect("[IP компа] ", Convert.ToInt32(textBox2.Text));
writestream = tcpsender.GetStream();
writer = new StreamWriter(writestream);
writer.Write(textBox3.Text);
listBox1.Items.Add( textBox3.Text);
writer.Close();
}
}
}
Есть 2 textBox'а для портов и кнопка "Слушать". Естественно, listBox, еще один textBox и кнопка "Отправить"
-------------------------------
P.S. Не ругайтесь, если вопрос дурацкий. Я еще совсем новичок в C#.
Это вопрос даже не про С#, а вообще про архитектуру сетевых программ.
Основная проблема кроется в том, что в интернете между двумя хостами, которым нужно соединиться друг с другом, существует множество преград. Конечно же, есть способы по преодолению этих преград (например, которые используются в скайпе, в торрентах) , но они чрезвычайно сложны.

В вашем случае можно организовать простейшую клиент-серверную архитектуру: у нас есть один программа-сервер, которая будет принимать на себя подключения пользователей и которая будет работать как промежуточное звено между ними. Чтобы пользователи могли к нему подключиться, нам нужно, чтобы у компьютера, на котором он запущен, был "белый ИП". Его можно оформить либо у провайдера как дополнительную услугу, либо взять в аренду виртуальный сервер (значительно дороже) .
Клиенты будут подключаться к этому серверу, отсылать ему запросы, которые тот будет перенаправлять другим пользователям.

К чему я это пишу. Лучше начните с простого чата, который будет работать по локалке :) Иначе все выльется в деньги.

ПС. А пример не работает потому, что сервер у вас слушает "петлю" (лупбэк) , а не 127.0.0.1 Из-за этого, и еще из-за того, что не указывается порт, никто ни к кому не подключится.
АБ
Арсен Бабаян
1 124
Лучший ответ
Тебе для дела, или для обучения?
Если ты учишься, то я скажу так - не знаю.
А если для дела, то не морочь голову, делай своей прогой файлы и отправляй их почтой. Или через файлообменник, если большие.
Саша Сивый
Саша Сивый
66 526
Предположим, что программа передает какие-то данные другой по TCP-протоколу. Для того, чтобы достучаться до какого-либо компьютера через интернет, у него должен быть "белый" (или статический) IP. Это в сетях часто платно, ибо адрес IPv4 уже дефицит, на каждую микроволновку не повесишь.

Можно и бесплатно с помощью доменного имени и такой ерундени, как DDNS или Dynamic DNS.
Например, здесь: www . noip . com
Достаточно ссылаться на выданный этим сервисом домен, а IP он разрешит самостоятельно. Но для этого необходимо будет установить программу, которая будет мояковать сервису о текущем адресе.
Dmytro Bilousov
Dmytro Bilousov
7 783