UDP C# Communication DumyC#

Место общения программистов C#
Ответить
Anonymous
 UDP C# Communication Dumy

Сообщение Anonymous »

Это мой первый раз задаю вопрос, поэтому, пожалуйста, простите меня, если я пропустил какую -либо информацию. Я совершенно новичок в использовании UDP и других коммуникаций сокетов на C#, поэтому я довольно застрял в этом. Машина еще не достигла нас, поэтому я не могу проверить код с помощью реальной машины. Мое представление о том, как это работает: < /p>
Сначала будет настроена машина «сервер» для прослушивания на определенном IP -адресе и порте, а затем компьютер «клиент» будет отправлять пакеты на тот же IP -адрес и порт. «Сервер» должен забрать на пакет и основываясь на контенте, ответьте с соответствующим ответом. Я могу получить ответ от моей машины «сервера», когда я отправляю сообщение в линии .connect , но с помощью линии .connect в коде я не могу получить ответ. С помощью ПК, который утверждает, какую функцию я звоню, и на основе отправленных функций, переключить корпус и ответьте соответствующим ответом (также строка): < /p>
На загрузке формы он получает IP -адрес моего ноутбука и отображается на моем текстовом поле. Затем я использую этот IP -адрес в программном обеспечении «клиент» для отправки пакетов в < /p>
private void Form1_Load(object sender, EventArgs e)
{
UdpListenPort = Int32.Parse("11000");

// Get an IP of the machine on which the server is running on
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
{
socket.Connect("8.8.8.8", 65530);
IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
localRunningIP = endPoint.Address.ToString();
}

IPAddTB.Text = localRunningIP;
PortNoTB.Text = UdpListenPort.ToString();
}

private void StartBttn_Click(object sender, EventArgs e)
{
if (isListening) return;

udpServer = new UdpClient(port);
isListening = true;
listenThread = new Thread(ListenForMessages);
listenThread.IsBackground = true;
listenThread.Start();

serverLogLB.Items.Add($"[Server] Started on port {port}...");
}

private void ListenForMessages()
{
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, port);

try
{
while (isListening)
{
byte[] data = udpServer.Receive(ref remoteEP);
string msg = Encoding.UTF8.GetString(data);
Invoke((MethodInvoker)(() => serverLogLB.Items.Add($"[From {remoteEP}] {msg}")));

//switch case to return a string with the appropriate response for the given function
string response = handleMessages(msg);

// Respond to client
byte[] responseData = Encoding.UTF8.GetBytes(response);
udpServer.Send(responseData, responseData.Length, remoteEP);
}
}
catch (Exception ex)
{
if (isListening)
Invoke((MethodInvoker)(() => serverLogLB.Items.Add($"[Error] {ex.Message}")));
serverLogLB.TopIndex = serverLogLB.Items.Count - 1;
}
}
< /code>
Вторая программа: Dummy Pc - В этой программе C# я пытаюсь поговорить с сервером, используя этот код: < /p>
private bool connectToServer()
{
if (isConnected) return true;

try
{
// start the server
string ip = IPAddTB.Text;
int port = int.Parse(PortNoTB.Text);

udpClient = new UdpClient();
serverEP = new IPEndPoint(IPAddress.Parse(ip), port);

//udpClient.Connect(serverEP);
}
catch (Exception ex)
{
serverLogLB.Items.Add("Failed to connect to server at:");
serverLogLB.Items.Add($"{IPAddTB.Text}, using port: {PortNoTB.Text}");
return false;
}
}

private string SendMessage(string message)
{
logsTB.AppendText($"Trying to send message: {message}\n");

byte[] data = Encoding.UTF8.GetBytes(message);
udpClient.Send(data, data.Length, serverEP);

logsTB.AppendText($"[Client] Sent: {data}\n");

// Wait for response from server
udpClient.Client.ReceiveTimeout = 2000;
try
{
IPEndPoint remoteEP = null;

//byte[] response = udpClient.Receive(ref remoteEP);
///logsTB.AppendText($"Received Message: {BitConverter.ToString(response)}\n");

string responseMsg = Encoding.UTF8.GetString(response);
logsTB.AppendText($"Received Message: {responseMsg}\n");

return responseMsg;
}
catch (Exception ex)
{
logsTB.AppendText($"[Client] No response: {ex.Message}\n");
logsTB.ScrollToCaret();

return "Error or Unknown function code";
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... tion-dummy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»