ورود

View Full Version : حرفه ای: آیا راه حلی برای حذف Time out در خواندن از سوکت وجود داره؟



_Memol_
دوشنبه 26 آبان 1393, 14:25 عصر
با سلام
من برنامه ای با سوکت نوشتم که با یک مدار متصل هست یعنی pc با یک مدار وصل هست از طریق سوکت و ip 192.168.0.1 و پورت 80 که با وقتی با pc به این مدار وصل میشم میتونم اطلاعاتی رو بخونم و یا بنویسم یه تایمر گذاشتم که هر ثانیه میاد از سوکت میخونه
مشکلم اینه مثلاً یه کارت جای کارت خوان میزارم میخونه و توو pc میبینم اما نیم ساعت بعد می بینم که دیگه کانکت نیست و خود به خود قطع میشه آیا time outشو نمیشه کاری کرد
این برنامه خیلی برام مهمه خوشحال میشم کدمو هم ببینید و ایرادمو بگید

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
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;
using System.Windows.Threading;

namespace testsocket
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{

Socket s = null;
IPEndPoint hostEndPoint;
IPAddress hostAddress = null;
int conPort = 80;

DispatcherTimer timer = new DispatcherTimer();

public MainWindow()
{
InitializeComponent();

timer.Tick += timer_Tick;
timer.Interval = new TimeSpan(0, 0, 1);
}


void timer_Tick(object sender, EventArgs e)
{
try
{

if (s.Connected)
{

byte[] RecvBytes = new byte[s.ReceiveBufferSize];


int bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);

string str = Encoding.ASCII.GetString(RecvBytes, 0, bytes);
if (str != "")
{
lsttest.Items.Add(str);
lsttest.Items.Refresh();
}

}


}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());

}

}
byte[] data;

private void Connect_Click_1(object sender, RoutedEventArgs e)
{
Encoding ASCII = Encoding.ASCII;
IPHostEntry hostInfo = Dns.GetHostEntry("192.168.0.1");
IPAddress[] IPaddresses = hostInfo.AddressList;

for (int index = 0; index < IPaddresses.Length; index++)
{
hostAddress = IPaddresses[index];
hostEndPoint = new IPEndPoint(hostAddress, conPort);

s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect(hostEndPoint);

if (s.Connected)
{
txb1.Text = "Connected";
timer.Start();
}
} // End of the for loop.
}


}
}

_Memol_
سه شنبه 27 آبان 1393, 16:28 عصر
یعنی هیچ کی با wpf و سوکت کار نکرده؟