Hi Team
I need some help, my problem i have two WPF windows application one is TCPClient that trying to connect to TCPServer. TCPServer must be able to receive data back as json, so can telnet using putty to this IP address but gets connection to target machine is refused, no firewall nor ports conflict. The issue is on line on my code await using NetworkStream stream = Client.GetStream();. How do i make two windows to connect to another both TCPClient and TCPServer?
127.0.0.1 port 12345
// TCPClient code
//Back end
<pre>using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace PingServerApp
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
// declaring some local variables and method for clicking buttons.
bool eco = false;
async void OnClick1(object sender, RoutedEventArgs e)
{
// add to datagrid
dataGrid.Items.Clear();
await TcpRequest();
}
void OnClick2(object sender, RoutedEventArgs e)
{
eco = false;
}
class Body { public Guid Id { get; set; } }
// class for model
public class TCPConnectionModel
{
public TimeOnly Started { get; set; }
public TimeOnly Processed { get; set; }
public TimeSpan Elapsed { get { return Processed - Started; } set { } }
}
// TCPRequest for body and serialize and deserialize json data
async Task TcpRequest()
{
try
{
// initiate tcp
IPHostEntry IpHostInfo = Dns.GetHostEntry("127.0.0.1");
IPAddress IpAddress = IpHostInfo.AddressList[0];
// initiate endPoint
var endPoint = new IPEndPoint(IpAddress, 12345);
// starting tcp client
using TcpClient Client = new TcpClient();
await Client.ConnectAsync(endPoint);
await using NetworkStream stream = Client.GetStream();
eco = true;
while (eco)
{
// start timer
TCPConnectionModel displayData = new() { Started = TimeOnly.FromDateTime(DateTime.Now) };
// initiate send data
Body requestBody = new() { Id = Guid.NewGuid() };
//initiate recieve data
var buffer = new byte[1_024];
// Json Serialize
string jsonString = JsonSerializer.Serialize(requestBody);
// tcp send
await stream.WriteAsync(Encoding.ASCII.GetBytes(jsonString));
// tcp recieve and decode
int received = await stream.ReadAsync(buffer);
var message = Encoding.UTF8.GetString(buffer, 0, received);
// json Deserialize
Body? recievedBody = JsonSerializer.Deserialize<Body>(message);
// stop timer
displayData.Processed = TimeOnly.FromDateTime(DateTime.Now);
// delay for 500ms
Thread.Sleep(500);
// add to datagrid
dataGrid.Items.Add(displayData);
// display result in status bar
resultveiw.Text = message;
}
}
catch (Exception ex)
{
resultveiw.Text = ex.Message;
}
}
}
}
// TCPServer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Net.Sockets;
using SimpleTCP;
using System.IO;
namespace GUI
{
/// <summary>
/// Interaction logic for EchoWindowTest.xaml
/// </summary>
public partial class EchoWindowTest : Window
{
public EchoWindowTest()
{
InitializeComponent();
}
SimpleTcpServer server;
public class DisplayData
{
public TimeOnly Started { get; set; }
public TimeOnly Processed { get; set; }
public TimeSpan Elapsed { get { return Processed - Started; } set { } }
}
private void MainWindow_Load(object sender, EventArgs e)
{
try
{
DisplayData displayData = new() { Started = TimeOnly.FromDateTime(DateTime.Now) };
displayData.Processed = TimeOnly.FromDateTime(DateTime.Now);
server = new SimpleTcpServer();
server.Delimiter = 0 * 13;
server.StringEncoder = Encoding.UTF8;
server.DataReceived += Server_DataReceived;
Thread.Sleep(500);
dataGrid.Items.Add(displayData);
}
catch (Exception ex)
{
txtStatus.Text = ex.Message;
}
}
private void Server_DataReceived(object sender, SimpleTCP.Message e)
{
txtStatus.Dispatcher.Invoke(new Action(delegate
{
txtStatus.Text += e.MessageString;
}));
}
public void btnStart_Click(object sender, RoutedEventArgs e) /*Start button*/
{
txtStatus.Text += "Server starting ...";
System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(txtHost.Text));
server.Start(ip, Convert.ToInt32(txtPort.Text));
}
public void btnStop_Click(object sender, RoutedEventArgs e) /*Stop button*/
{
if (server.IsStarted)
server.Stop();
}
}
}