Клиент-сервер | Не работает подключение
Добавлено:
25 апр 2020, 00:56
FigeraldS
Доброго времени суток. Пишу клиент-серверное взаимодействие и никак не могу понять: если запускаю на одном компьютере и клиент, и сервер, то все отлично, а если переношу сервер на телефон,явно указывая ip-адрес, то подключение не работает.
Заранее спасибо за все ответы!
Вот код:
Сервер.
Используется csharp
using System.Net.NetworkInformation;
using System.Net.Sockets;
static void Main(string[] args)
{
Console.Title = "Server";
Socket serverSocket = new Socket(/*AddressFamily.InterNetwork, */SocketType.Stream, ProtocolType.Tcp);
Console.WriteLine("Ожидание подключения");
serverSocket.Bind(new IPEndPoint(IPAddress.Any, 8080));
serverSocket.Listen(5);
Console.WriteLine("Listen");
Socket client = serverSocket.Accept();
Console.WriteLine("Accept");
}
Клиент
Используется csharp
using System.Net.NetworkInformation;
using System.Net.Sockets;
void Start()
{
Socket client = new Socket(SocketType.Stream, ProtocolType.Tcp);
do
{
client.Connect(IPAddress.Parse("192.168.0.106"), 8080);
} while (!client.Connected);
}
Re: Клиент-сервер | Не работает подключение
Добавлено:
28 апр 2020, 13:11
Saltant
А коннектить клиент через while это типа ваще норма? Я считаю не норма.
Re: Клиент-сервер | Не работает подключение
Добавлено:
28 апр 2020, 20:32
FigeraldS
AngryCat писал(а):Какие ошибки пишет?
Ошибок никаких, просто как будто адрес не тот, но это не так. С этой штукой разобрался, но у меня теперь другая проблема: не пингуются устройства:
Сервер на одном телефоне, клиент - на другом.
Используется csharp
Ping ping = new Ping();
txt.text += $"\n{ping.Send(IPAddress.Parse("192.168.43.173")).Status}";
clientSocket.Connect(IPAddress.Parse("192.168.43.173"), 6843);
Вот так пингую. Но до clientSocket.Connect не доходит
Re: Клиент-сервер | Не работает подключение
Добавлено:
28 апр 2020, 20:33
FigeraldS
Saltant писал(а):А коннектить клиент через while это типа ваще норма? Я считаю не норма.
while изначально у меня, чтобы пинговать устройства в сети и те, что пингуются - к ним пытаться подключаться.
Re: Клиент-сервер | Не работает подключение
Добавлено:
28 апр 2020, 22:38
Saltant
А сервер на мобильном телефоне это вообще нормальное явление? я считаю что не нормальное. Что вы за гайды такие курите что потом такие идеи у вас интересные
Re: Клиент-сервер | Не работает подключение
Добавлено:
29 апр 2020, 10:47
FigeraldS
Saltant писал(а):А сервер на мобильном телефоне это вообще нормальное явление? я считаю что не нормальное. Что вы за гайды такие курите что потом такие идеи у вас интересные
Хорошо, тогда каким образом мне соединять два устройства для передачи сообщений друг другу?
Re: Клиент-сервер | Не работает подключение
Добавлено:
29 апр 2020, 11:59
Saltant
Ну как ты в WatsApp или другом мессенджере обмениваешься сообщениями? Так же и тут делай. Пишешь сервер на ПК который принимает подключения, к нему подключаешь клиентов, не важно какое устройство, хоть микроволновку, далее клиент отправляет серверу сообщение, сервер его получает, обрабатывает и пересылает нужным тебе адресатам ибо сервер знает о всех подключенных клиентах. Вот по такому принципу делают клиент-серверные приложения.
Re: Клиент-сервер | Не работает подключение
Добавлено:
29 апр 2020, 12:29
FigeraldS
Saltant писал(а):Ну как ты в WatsApp или другом мессенджере обмениваешься сообщениями? Так же и тут делай. Пишешь сервер на ПК который принимает подключения, к нему подключаешь клиентов, не важно какое устройство, хоть микроволновку, далее клиент отправляет серверу сообщение, сервер его получает, обрабатывает и пересылает нужным тебе адресатам ибо сервер знает о всех подключенных клиентах. Вот по такому принципу делают клиент-серверные приложения.
Мне нужен обмен сообщениями между двумя андроид-устройствами. И я делаю так, чтобы сервером был один из них.
Re: Клиент-сервер | Не работает подключение
Добавлено:
29 апр 2020, 13:11
Saltant
Тогда это называется Peer-to-Peer (P2P, одноранговая сеть) а не клиент-серверное приложение. Посмотри информацию по этой теме тут
https://professorweb.ru/my/csharp/web/level8/8_3.php и тут
https://docs.microsoft.com/ru-ru/dotnet ... at-ext-3.1P.S сам ссылки я подробно не читал, но тебе точно нужно копать в сторону P2P архитектуры раз ты хочешь подключать одного клиента к другому.
Re: Клиент-сервер | Не работает подключение
Добавлено:
29 апр 2020, 19:41
FigeraldS
Спасибо за ссылки. Я уже смотрел Р2Р, но у меня вылетает ошибка на
Используется csharp
PeerCollaboration.GetPeersNearMe()
. Вероятно, P2P работает только на windows 7 и vista. Ошибка: PeerToPeerException: Сбой при запуске одноранговой совместной работы. Одноранговая инфраструктура Windows не лицензирована для работы в данной платформе.
Re: Клиент-сервер | Не работает подключение
Добавлено:
29 апр 2020, 19:53
Saltant
Ну вообще, самым наитупейшим способом через tcp listener тоже должно работать всё, при условии что открыты порты и трафик нигде не блокируется, честно говоря на андройде я не имел потребности поднимать сервер, просто за ненадобностью, одноранговые сети (p2p) это как прошлый век, если нужно соединить устройства я всегда делаю через мастер сервер, такой написать можно за час и закинуть куда нить в облако если нет собственного физического сервера.
Так что дебаж, смотри на каком этапе не идет трафик, можешь пакеты половить в сети, благо в своей вай фай сети ты можешь это спокойно и законно сделать.
Re: Клиент-сервер | Не работает подключение
Добавлено:
01 май 2020, 05:53
FigeraldS
Saltant писал(а):Ну вообще, самым наитупейшим способом через tcp listener тоже должно работать всё, при условии что открыты порты и трафик нигде не блокируется, честно говоря на андройде я не имел потребности поднимать сервер, просто за ненадобностью, одноранговые сети (p2p) это как прошлый век, если нужно соединить устройства я всегда делаю через мастер сервер, такой написать можно за час и закинуть куда нить в облако если нет собственного физического сервера.
Так что дебаж, смотри на каком этапе не идет трафик, можешь пакеты половить в сети, благо в своей вай фай сети ты можешь это спокойно и законно сделать.
Немного поискал, нашел такую штуку.
Клиент:
Используется csharp
void Start(){
localIp = InitLocalIp();
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 1556);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
Debug.Log("Ready to receive...");
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Debug.Log($"received: {stringData} from: {ep}");
sock.SendTo(Encoding.ASCII.GetBytes(localIp), ep);
}
static string InitLocalIp()
{
string Host = Dns.GetHostName();
string IP = Dns.GetHostAddresses(Host)[0].ToString();
return IP;
}
Сервер:
Используется csharp
UdpClient udp = new UdpClient();
int GroupPort = 1556;
IPEndPoint groupEP = new IPEndPoint(IPAddress.Broadcast, GroupPort); //Parse("255.255.255.255")
string str4 = "Is anyone out there?";
byte[] sendBytes4 = Encoding.ASCII.GetBytes(str4);
udp.Send(sendBytes4, sendBytes4.Length, groupEP);
byte[] receiveBytes = udp.Receive(ref groupEP);
string returnData = Encoding.ASCII.GetString(receiveBytes);
Debug.Log("Response: " + returnData);
т.е отправляю Broadcast, но на двух андроидах также не работает.
Re: Клиент-сервер | Не работает подключение
Добавлено:
01 май 2020, 08:31
Saltant
А зачем такой низкий уровень вообще? Есть же Telepathy например
https://github.com/vis2k/Telepathy
Re: Клиент-сервер | Не работает подключение
Добавлено:
01 май 2020, 18:56
FigeraldS
Спасибо большое за ссылку, но когда в клиенте указываю ip-адрес 255.255.255.255, то выдает ошибку, что неверный формат адреса.