Я новичок в программировании сокетов, поэтому у меня есть вопрос. Я пытаюсь создать два приложения, сервер и клиент, которые должны отправлять и получать файлы между собой через Интернет (отправлять и получать файлы). Будет только один сервер и только один клиент, поэтому я решил, что мне не нужно асинхронное сокетное соединение.
Я пытался отправлять и получать файлы только через одно сокетное соединение, но это не сработало. Теперь я пытаюсь с двумя сокетами, работающими в разных потоках, используя один и тот же IP и разные порты, но это больше не работает. Должен ли я найти проблему в моем источнике, или мне придется использовать асинхронное сокетное соединение?
Это мое приложение на стороне сервера. Код для обоих сокетов довольно похож, единственный
Разница в том, какой порт я использую.
// My main thread starts another one, for the receiving of files
public static void StartListening() {
t = new Thread(receiveFile);
t.Start();
sendFile();
}
//
static void sendFile()
{
IPAddress ipAddress = IPAddress.Parse("192.168.1.101");
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 10999);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(10);
while (true)
{
handler = listener.Accept();
//code after connecting for sending files
while(true) {
//...
}
}
}
catch(Exception e) {}
}
static void receiveFile()
{
IPAddress ipAddress = IPAddress.Parse("192.168.1.101");
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(10);
while(true) {
handler = listener.Accept();
//code after connecting for receiving files
while(true) {
//...
}
}
}
catch(Exception e) {}
}
И это код в моем клиентском приложении для подключения к сокетам.
Опять же, разница только в розетках:
//Again i start a second thread, for the second socket
public static void StartClient() {
t = new Thread(receiveFile);
t.Start();
sendFile();
}
static void sendFile()
{
try
{
IPAddress ipAddress = IPAddress.Parse("95.110.62.74");
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);
sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sender.Connect(remoteEP);
//Code for sending to the server after connecting
while (true) { }
}
catch(Exception e) {}
}
catch(Exception e) { }
}
static void receiveFile()
{
try
{
IPAddress ipAddress = IPAddress.Parse("95.110.62.74");
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 10999);
sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sender.Connect(remoteEP);
//Code for sending to the server after connecting
while (true) { }
}
catch(Exception e) {}
}
catch(Exception e) { }
}
Я использую разные IP-адреса в своем серверном и клиентском приложении, потому что мой сервер находится за маршрутизатором, и я сказал маршрутизатору переадресовать соединение на оба сервера. Когда я запускаю обе программы, они подключаются только через один из сокетов, каждый раз, когда они разные, я имею в виду, что когда-то они подключаются к одному через порт 10999, иногда к другому, но никогда не к обоим.
Я не уверен, если я все объяснил ясно :)
Заранее спасибо