1-) C# - ileri programlama final 3-)windows services-soket ile ilgili örnek
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>installutil
E:\WindowsService1.exe
2-)servisi silmek için
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>installutil
/u E:\WindowsService1.exe
3-)C# kodu SERVER.CS
Windows service ile yazılmış soket programlama en basit şekliyle
aşşağıda
dinle();
fonksyonunu ezberle yorum satırı olduğuna bakma
4-)Server.cs(yani soketi dinleyen kısım aşşağıda = bu kısımda
soketi dinliyor ve mesaj gelirse onu console yazdırıyor.Burada Windows service
olduğudan ovveride OnStart() alanına kodu yazmamız lazım)
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Diagnostics;
using
System.Linq;
using
System.ServiceProcess;
using
System.Text;
using
System.Threading.Tasks;
using
System.Net;
using
System.Net.Sockets;
using
System.IO;
namespace
ileriservices
{
public partial class Service1
: ServiceBase
{
public
Service1()
{
InitializeComponent();
this.EventLog.Source
= this.ServiceName;
this.EventLog.Log
= "Application";
}
protected override void
OnStart(string[] args)
{
this.EventLog.WriteEntry("sunucu
başlatıldı . . .");
// dinle();
}
public void
dinle()
{
/* try
{
Socket s = new
Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);//
//InterNetwork = ipv4 ailesi
için
//SocketType.Dgram= UDP için
//SocketType.Stream= TCP için
//ProtocolType.IP = TCP ve
UDP de ip yi kullanır
s.Bind(new
IPEndPoint(IPAddress.Parse("127.0.0.1"), 600));
//127.0.0.1 = demek localhost
//6000 = demek port demek
0-65000 arasında deger verebılırsın 1024 den buyuk vermen senin için iyidir
s.Listen(9);//dinleme kuyrugu
9 girdik
Socket client =
s.Accept();//gelecek olan clienti kabul ettik
NetworkStream ns = new
NetworkStream(client);//NetworkStream=client ile haberleşmek için
StreamReader sr = new
StreamReader(ns);//StreamReaderclient ile haberleşmek için
Console.WriteLine(sr.ReadToEnd());//gelen ne varsa okuyup ekrana yazdık
this.EventLog.WriteEntry("yazz "+sr.ReadToEnd());
sr.Close();
ns.Close();
s.Shutdown(SocketShutdown.Receive);//soketi
kapattık veri alış verişini
client.Shutdown(SocketShutdown.Receive);//client ile bağlantıyı kopardık
}
catch (SocketException de)
{
Console.WriteLine("serverda hata
var \n" + de.Message);
}
*/
}
protected override void
OnStop()
{
}
}
}
2-)client.cs // server.cs portu dinliyordu . Client
ilede o ip-porta veri gönderecem ve Server.cs bunu dinlediği için o veriyi alıp
console yazıcak.istersen telnet ilede veri gönderebilirsin
telnet örn = telnet ile bağlanmak için
denetim masası-> windows özelliklerini aç veya
kapattan-> telnet istemcisini aç
sonra cmd ye
telnet 127.0.0.1 600
burada 127.0.0.1 = localhost
burada 600 = portu
telnet 127.0.0.1
600 diyerek ip ve porta bağlandık “echo merhaba” ilede veri gönder.
Aşşağıdadada Client.cs var ezberle
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace server1in_clienti
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void dinle()
{
Socket s = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,ProtocolType.IP);
s.Connect(IPAddress.Parse("127.0.0.1"),
600);
byte[] buffer =
Encoding.ASCII.GetBytes(textBox1.Text);//girilen karakterleri asciye cevir
ve byte dizisine at çünkü TCP oldu.
s.Send(buffer);//bufferimizi yani
verimizi gonderelim
s.Close();//socketi kapatalım
}
private void button1_Click(object sender,
EventArgs e)
{
dinle();
}
}
}