You are on page 1of 162

Dot Net Networks & By FADI Abdel-

qader, Jordan

TCP/IP Programming
‫ — ا ا و‬TCP/IP ‫اف  ا
ت ووآل‬
With Microsoft Visual C# & VB.NET

     ‫ا


  ا
و ه  
  ا
ر وه‬
( ) ‫ي ﺵ‬, ‫ ا
  ا
و‬- -%‫ ی‬،‫ء‬$‫ ﺕ‬%‫ﺕزی إ
و آ‬
 ‫اب اول  ه ا ا
ل‬
... ‫رة ور‬/  -%‫ ی‬%‫ﺵ ل آ‬1‫ا‬ ‫اﻉ‬
—‫— ا او‬

‫ا  ا
ر ه ا  ا ة  اب    وإ ا‬ Mobile : +962796284475
ُPhone: +96265055999
#‫* ا)' (' !&ت اوت ﻥ‬+ ‫ اروس ا ! آ ﺱ
ف‬ E-mail: fadi822000@yahoo.com

... 2005 ‫ و‬2003 ‫ار‬/0(VB.NET & C#.NET


‫ اﺡ  وی ا‬8!+ ‫ل‬:;‫ ا‬8‫!@ أ وا;ﺱ? ر أو ا
زی یﺝ‬A

Mobile : +962796284475
ُPhone: +96265055999
E-mail: fadi822000@yahoo.com
BOX: 311 Mail Code 11947 Tariq—Amman—Jordan

My online CV: http://spaces.msn.com/members/csharp2005/

‫ اردن‬- ‫"ﺩ ا در‬# ‫ دي‬%&'

Version 1.0, 2005 - 2006

1
:*‫ا
ﺩ‬

 ‫"!ام ت اوت‬#$ ‫ت‬%&'‫*)( ا‬+&$ (,-."/‫ر ا‬1*2‫ ا‬3‫"ب أه‬%‫ا ا‬7‫ ه‬89:;
‫م‬,"/‫> إ< ا‬#1"/‫&"ئ إ< ا‬/‫ى ا‬1"‫ﺱ‬/‫ ا‬B* C$ D,":; ‫ﺱ> إذ‬$‫ﺱ و‬-# ‫ب‬1-#G$
‫ت‬,&OP‫ و‬TCP/IP Models BK (*K (*,/$ ‫"ب‬%‫ و ;&أ ا‬، I"/*‫ و‬D/H ‫ب‬1-#G$
Socket BK DST* ‫ح‬+V <-K ‫ي‬1"‫ و;ﺡ‬/‫ت اوت  آ‬- ‫"!ام‬#$ Client/Server
‫"!ام ال‬#$ (*,"* (/^‫ء أ‬:$‫ و‬Network Layer Protocols ‫ وال‬Programming
BK 3%‫( ا"ﺡ‬/^‫ وأ‬Remote Desktop ‫*)ت ال‬+$‫ات و‬+/Pa/‫( ا‬/^G‫ آ‬Multicasting
Application Layer ‫ت ال‬e1‫آ‬1P+$ 3‫ه‬2 DST* ‫ح‬+V <-K ‫ي‬1"‫ و;ﺡ‬/‫ آ‬، ‫ه‬+d‫ و‬.$
Ik‫;( وو‬/‫ق اﺡ‬+m BK DST* ‫ح‬+V ‫ا‬+j‫ وأ‬، ‫ت‬%&'‫*)ت ا‬+$ gh iP*‫"!ا‬#‫وا‬
... ‫ت‬%&'‫*)ت ا‬+$ gh ‫ت‬#‫ﺡت واﺱ‬oS‫ا‬

:‫اهﺩاء‬

... 3.‫ أﺡء ا‬I/H gh ‫ب‬+.‫ ا‬B)*+&/‫ب وا‬oO‫"ب إ< ا‬%‫ا ا‬7‫اهي ه‬

2
:1‫ر‬.‫ل  ا او وا ا‬./0‫ ا‬-*

:‫ا او‬
Chapter 1: An Overview on Networks & TCP/IP Programming

Chapter 2: Managed I/O: Streams, Readers, and Writers

Chapter 3: The Socket & Network Layer Programming

Chapter 4: Advanced Multicasting Systems

Chapter 5: Application Layer Programming

Chapter 6: Network Security Programming

:1‫ر‬.‫ا ا‬
(uou B* ‫ن‬1%"P ‫ إذ‬، ‫ت ا);ة‬hks‫ ا‬B* +t%‫< ا‬-K (9‫ر‬1‫ﺱ!( ا‬:‫ي ا‬1"‫ﺡ‬P ‫ف‬1#
:g-; /‫اء آ‬wH‫أ‬

I/H‫ و‬Java ‫ وال‬C++6 ‫ وال‬VB6 ‫ ال‬g)*+&/ 3i* :B-Sh B* ‫ن‬1%";‫ و‬:‫ول‬2‫ء ا‬w)‫ا‬
 ‫ إ< اوت‬B-,":/‫ ا‬B)*+&/‫ا‬
Part 1: Preparation to Dot Net

Chapter 1: Dot Net Infrastructure & OOP

Chapter 2:ADO.NET

(*,"/‫ت ا‬%&'‫( ا‬/^‫ء أ‬:$ ‫ف‬+"‫ اﺡ‬:‫ل‬1Sh (/u B* ‫ن‬1%";‫ و‬:3‫ء ا‬2 ‫ا‬
 ‫ت اوت‬:,P ‫"!ام‬#$
Part 2: .Net Networks & TCP/IP Programming

Chapter 3: An Overview on Networks & TCP/IP Programming

Chapter 4: Managed I/O: Streams, Readers, and Writers

Chapter 5: The Socket & Network Layer Programming

Chapter 6: Advanced Multicasting Systems

Chapter 7: Application Layer Programming

Chapter 8: Remotting & Web Services

Chapter 9: .Net Security Overview & Network Security Programming

Chapter 10: Performance Improvement & Multithreading

. ‫"!ام اوت‬#$ ‫ت‬%&'‫( ا‬/^‫< أ‬-K (-/K I;‫ت و*'ر‬,&OP :43‫ء ا‬2 ‫ا‬

Part 3: .Net Networks Applications & Real Projects

...‫ وا
=ر;< ا
?و>  اب‬3*‫ ا‬5# ‫ي‬.‫ ;ﺡ‬CD 5‫ إ‬7

3
:‫;ت  او‬.‫س ا
ﺡ‬C

Chapter 1: An Overview on Networks & TCP/IP Programming ……… Page 6

Introduction to Network and TCP/IP Programming

A. Introduction to TCP/IP Layers


B. Connection Oriented Via TCP Overview
C. Connection Less Via UDP Overview
D. Streaming & Threading Overview
E. IP Multicasting Overview

Chapter 2: Managed I/O: Streams, Readers, and Writers ………...…… Page 31

Managed I/O: Streams, Readers, and Writers

F. Stream Classes
G. Stream Members
H. Stream Manipulation
I. Simple Remote Control Application Using StreamReader &
StreamWriter Classes

Chapter 3: The Socket & Network Layer Programming …………….… Page 44

The Socket & Network Layer Programming

A. Socket Programming
B. Socket Class Members
C. TCP & UDP Classes Members
D. Asynchronous Sockets

Chapter 4: Advanced Multicasting Systems ………………………..…… Page 70

Advanced Multicasting Systems

A. Architecture of Multicast Sockets


B. Using Multicast Sockets with .NET
C. Multicast Conferencing Systems :
1.Full/Half Duplex Multicast Video Conferencing System.
2.Full/Half Duplex Multicast Desktop Conferencing
System.
3.Full/Half Duplex Multicast Text Conferencing System

4
Chapter 5: Application Layer Programming …………………………… Page 98

Application Layer Programming

A. DNS Programming
B. SMTP Programming
C. POP3 Programming
D. HTTP Programming
E. Web Services & XML Programming
F. FTP Programming

Chapter 6: Network Security Programming ………………………….… Page 147

Network Security Programming

Dot Net Security Namespaces Overview


1. Cryptography
2. Permission

5
Dot Net Networks & TCP/IP Programming

Chapter 1
An Overview on Network &
TCP/IP Programming

Introduction to Network and TCP/IP Programming

A. Introduction to TCP/IP Layers


Programming
B. Connection Oriented Via TCP Overview
C. Connection Less Via UDP Overview
D. Streaming & Threading Overview
E. IP Multicasting Overview

6
\>‫\ ا[ ا>
] ا‬

TCP/IP ‫ل‬.‫آ‬.'‫ * ﺩ*  *  ا="ت و و‬: 1.1


‫ل‬SP‫( ا‬-#‫ و‬+&K i‚.$ I* (-S"* ‫ة‬wiH2‫ ا‬B* (K1/)* g‫( ه‬%&'‫وف أن ا‬+./‫ ا‬B*
+/P g"‫ل وا‬SPe‫( ا‬-/.OSI (/^:/ ‫وف‬+./‫ ا‬3‫ﺱ‬,"‫ ا‬:; ‫رج‬:# :‫ ه‬B*‫( و‬:.*
(‫ﺱ‬/j)‫ت‬,&m (.$‫ره إ< أر‬S"j‫ ا‬3P‫( و‬:.* (T„‫ و‬i:* (,&m D% ‫ت‬,&m (.&‫ﺱ‬$
:‫ت‬,&O‫‰ ا‬7‫( ه‬,h+/‫رة ا‬1S‫ ا‬B&P‫ و‬TCP/IP ‫ل‬1‫آ‬1P+$ gh (†"%‫‡ ا‬.$ gh

: g-; * ‫م‬w-; Server ‫ و‬Client B$ ‫ل‬SPe‫( ا‬-/K ‫اء‬+Hs


: Client D#+/‫ز ا‬i)‫ ا‬gh
D*."‫ ا‬:‫ ه‬i"T„‫ وو‬Application Layer ‫ ال‬gh (-#+/‫( ا‬#+‫‹ ا‬1P (-/K ‫&أ‬P
، (%&'‫ ا‬+&K i#‫ إر‬B%/; Data <‫( إ‬S (‫ ﺹ‬B* i-;1‫ﺡ‬P‫ و‬i‫ﺱ‬T (#+‫ ا‬I*
<‫ إ‬3u ASCII Code <‫ب إ‬1"%/‫ﺹ ا‬:‫ ا‬D;1‫ﺡ‬P 3"; Chat (V‫*)ت ارد‬+$ gTh
‫ي‬7‫ وا‬Socket +&K i#‫ه وإر‬wi)" (h1TS* gh Ik1P Binary Code B* (K1/)*
‫ة‬1O!‫‰ ا‬7‫ ه‬k1P :‫ وه‬TCP/IP ‫ت ال‬,&m (,$ I* Application Layer ‫( ال‬,&m >$+;
...

7
<‫ إ‬ASCIIEncoding Class ‫"!ام ال‬#$ ‫ﺹ‬:‫( آ‬$1"%/‫( ا‬#+‫ ا‬D;1‫ﺡ‬P (,;+m B&P‫و‬
: Byte Array
C#
String str=Console.ReadLine();
ASCIIEncoding asen= new ASCIIEncoding();
byte[] ba=asen.GetBytes(str);

VB.NET
Dim str As String = Console.ReadLine
Dim asen As ASCIIEncoding = New ASCIIEncoding
Dim ba As Byte() = asen.GetBytes(str)
‫ت‬,&m (uou <‫ إ‬upper Layers ‫ ال‬3‫ﺱ‬,P 3P OSI ‫ذج‬1/ gh
User Interface </‫ﺱﻩ أو * ;ﺱ‬T —*+&‫ ا‬I* D*." Application
<‫ ا&ت إ‬D;1‫"ﺡ‬$ ,$# ‫ت‬+i„ /‫ آ‬g‫( وه‬-#+/‫ ا&ت ا‬Dt/P Presentation
. ASCII‫ال‬
"h )‡.&‫ ا‬3i‚.&$ ‹;+."‫ و ا‬B;‫ز‬i)‫ ا‬B$ †m!"‫( ا‬-/.$ ‫ ا&ء‬ih‫ و‬Session
… ((‫ﺱ‬-)‫ا‬
‫ت‬,&O‫ ا‬D/.$ ‫م‬1,P g"‫ وا‬Application (,&m ‫د‬1H1$ T"%h TCP/IP ‫ل ال‬1‫آ‬1P‫و‬+$ gh *‫أ‬
‫ات‬1Oj ‫ة‬.$ (‫ﺱ‬-)‫" ا‬h‫ف و‬+."‫ ا‬3"; session Layer gh ، OSI gh <‫و‬2‫ث ا‬ot‫ا‬
: g-; /‫ آ‬g‫وه‬
;‫ﺡ‬P .$ C‫ﺡد وذ‬/‫ ا‬Port ‫ و ال‬IP ‫ ال‬+&K server ‫ز‬i)$ g&/‫ل ا‬SPe‫اء ا‬+H‫ إ‬-1
TCP +&K ‫ أو‬UDP +&K ‫اء‬1# ‫ل‬SPe‫( ا‬-/K
C‫ ذ‬Server‫ز ال‬iH †-OP ‫ إذا‬Authentication ‫ ال‬D/K‫ﺱﻩ و‬T:$ ‹;+."‫ ا‬-2
i‚h‫ﺱ( أو ر‬-)‫" ا‬h <-K (,h‫ا‬1/‫ل ا‬#‫ر‬ $ C‫ ذ‬3";‫ﺱ( و‬-)‫‡ ا‬h‫ل أو ر‬1&9 -3
—*+&$ ‫ ا!ص‬Port‫< ال‬-K Listening D/.$ Server‫م ال‬9‫ﺱ( و‬-)‫أ ا‬$ -4

D#+/‫ز ا‬iH ‫م‬1,; †m!"‫( ا‬-/.$ ‫ﺱ( وا&ء‬-)‫" ا‬h <-K (,h‫ا‬1/‫ ا‬3"; *:K
‰7‫ ه‬gh‫ و‬Transport (,&m :‫ ه‬g‫ى وه‬+j2‫( ا‬,&O‫( إ< ا‬#+‫ ا‬D/‫"ﺡ‬$ Client
‫ ال‬+&K ‫ أو‬Connection Protocol - TCP +&K ‫اء‬1# ‫ل‬SPe‫( ا‬.&m ;‫ﺡ‬P 3"; (,&O‫ا‬
/‫ وه‬Bh+m ;‫ﺡ‬P 3"; ‫ول‬2‫ل ا‬1‫آ‬1P‫و‬+&‫ ا‬gTh UDP - Connectionless Protocol
‫ و‬D#+/‫ف ا‬+O‫ﺡ; ا‬P 3"h UDP ‫ل أ* ال‬SPe‫ ا‬Port‫ و‬D&,"‫ﺱ‬/‫ وا‬D#+/‫ا‬
(:.* (iH ;‫ﺡ‬P ‫ون‬$ Broadcast ‫ ال‬D/K B%/; ‫"ري( أي اﻩ‬j‫ )ا‬D&,"‫ﺱ‬/‫ا‬

8
IO"‫ ;ﺱ‬Listening Port‫ا ال‬7‫ ه‬+&K :S"$ ‫م‬1,; ‫!ﺹ‬V ‫( أي أن أي‬#+‫&ل ا‬,"#e
: TCP Protocol ‫"!ام ال‬#$ (,&O‫‰ ا‬7‫ ه‬D/K k1; ‫ل‬t* :‫ وه‬، (#+‫&ل ا‬,"#‫ا‬

C #:
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect("192.168.0.2",8001);

VB.NET:
Dim tcpclnt As TcpClient = New TcpClient
tcpclnt.Connect("192.168.0.2", 8001)

:g"‫ ا‬D%'‫ ا‬gh k1* 1‫ ه‬/‫ آ‬TCP ‫ ال‬gh ‫ل‬1‫ﺹ‬1‫ ا‬B* ¨,‫( ا"ﺡ‬-/K 3"P‫و‬

ih ‰+&!; D#+/‫ إ< ا‬Acknowledgment ‫ل رد‬#‫ إر‬3"; ‫ل‬#‫( إر‬-/K D‫ آ‬gh ‫إذ أﻩ‬
3P ‫ي‬7‫ ا‬Packet ‫ ال‬39‫ ر‬Acknowledgment Header ‫ ال‬gh D#+;‫ و‬،(#+‫ل ا‬1‫ﺹ‬1$
.ACK ID ‫< ال‬/‫)ح و;ﺱ‬:$ ‫&ﻩ‬,"#‫ا‬

(-/.‫‰ ا‬7i$ ‫م‬1,; w‫ه‬H Class  ‫ اوت‬gh ‫( ﺱ"!م‬%&'‫ ا‬+&K (#+‫ل ا‬#‫ر‬s‫و‬
‫ل‬#‫ل وإر‬SPe‫( ا‬-#‫ و‬I* D*."‫ ا‬BK ‫ل‬1«‫ﺱ‬/‫ ا‬1‫ وه‬NetworkStream </‫و;ﺱ‬
‫ﺱﻩ‬T Socket ‫"!ام ال‬#$ ‫ أو‬، Stream Data D%'$ g:./‫ف ا‬+O‫( إ< ا‬#+‫ا‬
:C‫< ذ‬-K ‫ل‬t/‫¬( وآ‬t‫ ا‬DST‫ ا‬+^‫)ا‬

9
C#:
NetworkStream mynetsream = tcpclnt.GetStream ();
StreamWriter myswrite = new StreamWriter (mynetsream);
myswrite.WriteLine("Your Message");

VB.NET:
Dim mynetsream As NetworkStream = tcpclnt.GetStream
Dim myswrite As StreamWriter = New StreamWriter(mynetsream)
myswrite.WriteLine("Your Message")

D#+/‫ان ا‬1:K Ik‫( وو‬#+‫( ا‬1:K 3"P ‫ إذ‬Network Layer <‫ إ‬3-‫ﺱ‬P C‫ ذ‬.$‫و‬
Physical Tunnel ‫ ال‬+&K i#‫ إر‬3" <‫د‬2‫( ا‬,&O‫ إ< ا‬3-‫ﺱ‬P‫ و‬i-K D&,"‫ﺱ‬/‫وا‬
... IP,IPv6,ARB-Address Resolution Protocol i-K (-t*2‫ ا‬B*‫و‬
B%‫ت و‬,&O‫ﺱ ا‬T <-K ‫ور‬+/$ ‫م‬1,h Server ‫ ال‬D&,"‫ﺱ‬/‫ز ا‬i)- (&‫ﺱ‬:$ *‫أ‬
3u Network 3u Data link <‫ل إ‬1‫ "ﺡ‬Bits ‫( ال‬%&'‫ت ا‬+‫ آ‬3-"‫ﺱ ﺡ¬ ;ﺱ‬%.$
.. Text <‫ إ‬ASCII B*‫ و‬ASCII <‫ إ‬Binary B* ‫ل‬1‫ﺡ‬P i:*‫ و‬Application 3u Transport
: Server ‫ ال‬D/K ‫ *&أ‬k1; ‫د‬1%‫‰ ا‬7‫وه‬

C #:
TcpListener myList=new TcpListener("127.0.0.1",8001);
myList.Start();
Socket s=myList.AcceptSocket();
byte[] b=new byte[100];
int k=s.Receive(b);
for (int i=0;i<k;i++)
Console.Write(Convert.ToChar(b[i]));
s.Close();

VB.NET:

Dim myList As TcpListener = New TcpListener("127.0.0.1", 8001)


myList.Start()
Dim s As Socket = myList.AcceptSocket
Dim b(100) As Byte
Dim k As Integer = s.Receive(b)
Dim i As Integer = 0
While i < k
Console.Write(Convert.ToChar(b(i)))
System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)
End While
s.Close()

10
Connectionless Sockets Via UDP : 1.2

TCP ‫ل ال‬1‫آ‬1P‫و‬+$ ‫ أن‬:$‫ و‬TCP – Connection Oriented Protocol ‫ ال‬BK ,$# :u‫ﺡ‬P
‫ان‬1:K <-K ‫ﻩ‬$ ‫ ا!ص‬Header ‫اء ال‬1"‫م اﺡ‬w-; ‫ اﻩ‬g:.; ‫ا‬7‫ﻩ وه‬H1* ‫ل‬1‫آ‬1P‫و‬+$ 1‫ه‬
‫ و‬Authentication ¨,‫ت ا"ﺡ‬-/.$ ‫م‬,‫م أ;‚ ا‬w-; /‫ آ‬D&,"‫ﺱ‬/‫ان ا‬1:K ‫ و‬D#+/‫ا‬
D%'$ 3-‫ و ا"ﺱ‬Acknowledgment ‫"!ام ال‬#$ ‫ل‬1‫ﺹ‬1‫ ا‬B* ¨,‫ت ا"ﺡ‬-/K 3K;
‫م‬1,; ‫ أن‬C)*+$ B* ;+P ‫ إذ‬C (&‫ﺱ‬:$ 3i* +d C‫ ذ‬D‫ آن آ‬1 ‫ *ذا‬B% .... ‫ﺡ‬S‫ا‬
‫( و أن‬#+‫ ا‬3-"‫ف ;ﺱ‬1# B* C/i; e‫ و‬C"#+ Broadcast gK‫¬ إذا‬$ (-/.$
‫ل‬1‫آ‬1P‫و‬+$ ‫ك‬+P C-K †H‫ إذا و‬g##2‫ف ا‬i‫ ا‬g‫&ل ه‬,"#e‫ل و ا‬#‫ر‬s‫ ا‬gh (K+‫اﺱ‬
‫ل‬$ ‚;‫< أ‬/‫ و;ﺱ‬UDP User Datagram Protocol ‫ ال‬1‫ﻩ ﺡ‬H1"‫ وا‬TCP ‫ال‬
‫ل‬$ </‫ * ;ﺱ‬D/K IO"‫ﺱ‬P ‫ل‬1‫آ‬1P‫و‬+&‫ا ا‬7‫ ه‬gh Connectionless Protocol
<‫ل إ‬#‫ر‬s‫ ا‬g:.;-Multi ‫ و‬D%‫ل إ< ا‬#‫ر‬s‫ ا‬g:.;-Broad) Multicast ‫ و ال‬Broadcast
B.$ ‰7jGP ‫م أن‬w-; ‫ط وﺡ‬+V H1; (>,h ‫اﺡ‬1 ‫ل‬#‫ر‬s‫ ا‬g:.;-Uni‫( وال‬K1/)*
g"‫( ا‬%&'‫ أن ا‬1‫ وه‬Broadcast ‫"!ام‬#$ ¬&‫( ا‬-/. UDP ‫"!ام ال‬#‫ ا‬:K ‫"&ر‬Ke‫ا‬
Router ‫د‬1H‫ون و‬$ ‫ أي‬Direct Connection +V&* D%'$ i.* DS"P i ¬$ D/K ;+P
¬‫ ﺡ‬Broadcast gK‫ذا‬s‫ت ا&¬ ا‬-/K I:/; Router ‫ إذ أن ال‬D&,"‫ﺱ‬/‫ ا‬B$‫ و‬C:$
‫وف أن ال‬+./‫ ا‬B*‫ و‬، C ‫ أو‬B ‫ أو‬A ‫اء‬1# Range Class ‫ ال‬B/k (%&'‫ن ا‬1%P ‫م أن‬w-;
D ‫ﺹ‬S!* gt‫ وا‬Network (%&' ‫ﺹ‬S!* ‫ول‬2‫ ا‬BwH <‫ إ‬3‫ﺱ‬,* IP Address
:g"‫ ا‬D%'‫ ا‬gh k1* 1‫ ه‬/‫ وآ‬HOST

:g-; /‫ آ‬C‫ ذ‬3"; Address : 10.0.0.0 – 255.0.0.0 ‫ إ< ال‬Broadcast D/. ot*
<,&; ‫ و;)† أن‬Network ID ‫ ال‬g‫( ه‬10) <‫و‬2‫ ﺡ¬ أن ا!( ا‬10.255.255.255
‫ل‬$ (‫ ا!ت ا!ﺹ‬I/H gh 255 ‫ ال‬Ik1;‫ و‬1‫ ه‬/‫ آ‬Network ID ‫ل‬$ ‫ء ا!ص‬w)‫ا‬
...HOST ID

11
‫ و ال‬System.Net Name Space ‹;+.P e‫م أو‬w-;  ‫ اوت‬gh UDP ‫"!ام ال‬#e
‫ز‬i)- ‫ان‬1:.‫ وا‬Port‫ ال‬39‫;‹ ر‬+.P ‫م‬w-; ‫ آن‬TCP ‫ ال‬gh ‫ﺡ¶ اﻩ‬e System.Net.Socket
D/K IO"‫ﺱ‬P‫ و‬/‫ آ‬TCP gh 1‫ ه‬/‫ﻩ آ‬T;+.P IO"‫"ﺱ‬h UDP ‫ ال‬gh *‫ أ‬D&,"‫ﺱ‬/‫ا‬
IPEndPoint ‫س‬o%‫ ا‬B* B‫ق آ‬,"V‫ ا‬.$ IPAddress.Any ‫"!ام‬#$ Broadcast
Method ‫"!ام ال‬#$ Port‫ ال‬39‫ﺡ; ر‬P ‫م‬K ‚;‫ أ‬IO"‫ﺱ‬P‫ف( و‬i‫( ا‬O, g:.P‫)و‬
... 0 ‫ ب‬iT;+.P 3"; ¬‫ ﺡ‬Bind
‫ا‬7‫ ه‬+&K (#+‫م ا‬o"#‫ ا‬3u i-K :S"‫وا‬5020 Port‫" ال‬h 3"; g"‫ل ا‬t/‫ ا‬gh
Port‫< ال‬-K i/-‫ﺱ‬P 3"; ¬‫ ﺡ‬Port ‫ ال‬39‫ﺡ; ر‬P ‫ون‬$ D%‫< ا‬-K i.;‫ز‬1P‫ و‬Port‫ال‬
:+T‫ ﺹ‬Port‫ ال‬1‫ وه‬#‫ود آ‬+&‫( ا‬-/. ‫ﺹ‬S!/‫ا‬

C #:
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5020);

VB.NET
Dim ipep As IPEndPoint = New IPEndPoint(IPAddress.Any, 5020)

:g-; /‫ آ‬C‫ ذ‬3"; ‫ﺱ"!م‬/‫ل ا‬1‫آ‬1P+&‫ع ا‬1 ;‫"ﺡ‬


C #:
Socket newsock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)

VB.NET
Dim newsock As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)

... Send ‫د‬1t/‫ إ< ا‬Port‫ ال‬39‫ف ور‬i‫( ا‬O, +;+/P 3u


39‫ ور‬IP Address ‫> ال‬$+P ‫> إذ‬,h D&,"‫ﺱ‬/‫ف ا‬+O‫ ا‬gh i.k‫ و‬3"; Bind Method ‫ال‬
: Socket ‫ل‬$ Port ‫ال‬
C #:
newsock.Bind(ipep);

VB.NET:
newsock.Bind(ipep)

Port‫< ال‬-K Server‫ ال‬I* DS"; B* D‫ إ< آ‬it$ ;+‫( و‬#+‫&ل ا‬,"#‫ ا‬3P ‫ن‬º‫ا‬
: g-; /‫ف آ‬i‫( ا‬O, ‹;+.P e‫م أو‬w-; C‫ ذ‬D/.‫( و‬,$‫اﺱ‬
C #:
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)(sender);

12
VB.NET:
Dim sender As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
Dim Remote As EndPoint = CType((sender), EndPoint)

(#+‫ل ا‬#‫ إر‬g:.; ‫ا‬7‫ وه‬+T‫ ﺹ‬Port‫ ال‬39‫ ور‬Any 1‫ف ه‬i‫( ا‬O, ‫ان‬1:K ‫ﺡ¶ أن‬e
Server‫( و ال‬#+‫ ا‬D#+* ‫ ا'!ﺹ‬3ih /$‫ و‬D%‫( إ< ا‬/-"‫ﺱ‬/‫ا‬

:(%&'‫ ا‬+&K ‫ى‬+j‫ة أ‬+* Server‫ إ< ال‬Server‫ ال‬B* (#+‫م ا‬o"#‫ ا‬3"; :‫ه‬

C #:
recv = newsock.ReceiveFrom(data, ref Remote);

VB.NET:
recv = newsock.ReceiveFrom(data, Remote)

:i‫ﺱ‬T (#+‫( و ا‬#+‫ ا‬D#+* ‫ان‬1:K (K&O


C #:
Console.WriteLine("Message received from {0}:", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

VB.NET:
Console.WriteLine("Message received from {0}:", Remote.ToString)
Console.WriteLine(Encoding.ASCII.GetString(Data, 0, recv))

‫ اﻩ‬i$ ‰+&! Server‫< ال‬-K C&'; ;H ‫ز‬iH D% (&‫ﺡ‬+P (#‫ل ر‬#‫ر‬ $ :‫م ه‬1,
:‫ة‬wiH2‫ ا‬B/k ‫ﻩ‬1j‫< د‬-K (,h‫ا‬1/‫ ا‬3P
C #:
string welcome = "Welcome Customer ...";
data = Encoding.ASCII.GetBytes(welcome);
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
VB.NET:
Dim welcome As String = "Welcome Customer ..."
Data = Encoding.ASCII.GetBytes(welcome)
newsock.SendTo(Data, Data.Length, SocketFlags.None, Remote)

‫ أي‬D&9 B* 9‫ أي و‬gh (#‫&ل أي ر‬,"#‫ ا‬:K 1‫ﻩ ه‬:* ‫ف‬i‫ ا‬Infinity Loop :‫ه‬
‫ إذا أردت‬... (%&'‫< ا‬-K 1‫ ه‬B* D‫ إ< آ‬i/-‫ﺱ‬P‫ و‬i*o"#$ Server‫م ال‬1,; ‫ز‬iH
<‫ إ‬infinity loop ‫ ال‬gh True +P IO"‫ﺱ‬P (/-"‫ﺱ‬/‫ ا‬D#+‫ ا‬B* B.* ‫د‬K ;‫ﺡ‬P
..‰;+P 39‫أي ر‬

13
C #:
while(true)
{
data = new byte[1024];
recv = newsock.ReceiveFrom(data, ref Remote);

Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
newsock.SendTo(data, recv, SocketFlags.None, Remote);
}
server.Close();

VB.NET:

While True
Data = New Byte(1024) {}
recv = newsock.ReceiveFrom(Data, Remote)
Console.WriteLine(Encoding.ASCII.GetString(Data, 0, recv))
newsock.SendTo(Data, recv, SocketFlags.None, Remote)
End While
server.Close()

‫ل‬1‫ﺹ‬1‫ ا‬3"; B ‫ و‬Infinity Loop B* ‫وج‬+!‫ ا‬3P ‫ ﺡ( إذا‬gh Socket ‫ق ال‬od‫ إ‬3"; :‫ه‬
‫ط‬+V ¨h‫ و‬Infinity Loop ‫ ال‬B/k Break Ik1$ ‫"ﻩ‬.m,* 3P ‫ إذا‬e‫( إ‬O,:‫‰ ا‬7‫إ< ه‬
Loop B* ‫وج‬+!‫ ا‬3"# (:.* (#‫( أو ﺹ ر‬#‫&ل ر‬,"#‫ ﺡ( ا‬gh ‫ أي اﻩ‬B.*
/‫ آ‬.$ BK Server ‫ق ال‬od‫ إ‬IO"‫ﺱ‬P C‫ ا‬g:.; ‫ا‬7‫ وه‬Socket ‫ق ال‬od‫ إ‬3"#‫و‬
B.* ‫ ﺡ( ورود ﺹ‬gh Server‫< ال‬-K ‫ي‬7T:P ‹-* ‫ أي‬D'P (-/H Ik‫ و‬C:%/;
. ‫ا‬7%‫وه‬

C#:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class SimpleUdpSrvr
{
public static void Main()
{
int recv;
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5020);
Socket newsock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
newsock.Bind(ipep);
Console.WriteLine("Waiting for a client...");

14
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)(sender);
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine("Message received from {0}:", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
string welcome = " Welcome Customer ...";
data = Encoding.ASCII.GetBytes(welcome);
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);

while (true)
{
data = new byte[1024];
recv = newsock.ReceiveFrom(data, ref Remote);

Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
newsock.SendTo(data, recv, SocketFlags.None, Remote);
}
}
}

VB.NET:

Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Class SimpleUdpSrvr

Public Shared Sub Main()


Dim recv As Integer
Dim data(1024) As Byte
Dim ipep As IPEndPoint = New IPEndPoint(IPAddress.Any, 5020)
Dim newsock As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)

newsock.Bind(ipep)
Console.WriteLine("Waiting for a client...")
Dim sender As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
Dim Remote As EndPoint = CType((sender), EndPoint)
recv = newsock.ReceiveFrom(data, Remote)
Console.WriteLine("Message received from {0}:", Remote.ToString)
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv))
Dim welcome As String = " Welcome Customer ..."
data = Encoding.ASCII.GetBytes(welcome)
newsock.SendTo(data, data.Length, SocketFlags.None, Remote)
While True
data = New Byte(1024) {}
recv = newsock.ReceiveFrom(data, Remote)

15
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv))
newsock.SendTo(data, recv, SocketFlags.None, Remote)
End While
End Sub
End Class

I* (‫ﺱ‬-H ‫'ء‬ $ Client ‫م ال‬9 <-K :‫ ه‬D/.‫ ا‬+S",; ، Client ‫ل‬$ ‫ء ا!ص‬w)‫ن ا‬º‫ا‬
‫ أن‬e‫¨ إ‬$‫ اﺱ‬gh 3P /‫ وآ‬Port‫ ال‬39‫ ور‬IPEndPoint ‫ل‬$ ‫ﻩ‬T;+.P .$ C‫ وذ‬Server‫ال‬
‫ل‬#‫ وإر‬Server‫ ال‬B* (#+‫&ل ا‬,"#‫< ا‬-K >,h +S",; ‫( إذا‬T„1‫ ا‬gh 1‫ف ه‬o"je‫ا‬
: g"‫د ا‬1%‫ ا‬+^‫( ا‬-/.‫‰ ا‬7i$ ‫م‬,- ‫ﺹ‬S!/‫ ا‬Port‫ ال‬+&K ‫ﻩ ﻩ‬#‫أي ر‬

C#:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class SimpleUdpClient
{

public static void Main()

byte[] data = new byte[1024]; string input, stringData;

IPEndPoint ipep = new IPEndPoint( IPAddress.Parse("127.0.0.1"), 5020);

Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,


ProtocolType.Udp);

‫ ال‬I* ‫ل‬SPe‫ان ا‬,h (‫ ﺡ‬ghServer("‫( ا‬#+‫ ا‬+i^;


string welcome = "Hello, are you there?";

data = Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, ipep);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)sender;

data = new byte[1024];


int recv = server.ReceiveFrom(data, ref Remote);
Console.WriteLine("Message received from {0}:", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

while(true)D#+‫ ا‬B* ‫ *ﺡد‬+d ‫د‬K ‫ل‬#‫ إر‬IO"‫ﺱ‬P g%


{

16
input = Console.ReadLine();
Exit †"‫ﺱ( اآ‬-)‫ء ا‬i‫ ﺡ( إذا أردت إ‬gh

if (input == "exit")
break;

server.SendTo(Encoding.ASCII.GetBytes(input), Remote);
data = new byte[1024];

recv = server.ReceiveFrom(data, ref Remote);


stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine(stringData);

Console.WriteLine("Stopping client");
server.Close();

VB.NET:
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Class SimpleUdpClient

Public Shared Sub Main()


Dim data(1024) As Byte
Dim input As String
Dim stringData As String
Dim ipep As IPEndPoint = New
IPEndPoint(IPAddress.Parse("127.0.0.1"), 5020)
Dim server As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)
Dim welcome As String = "Hello, are you there?"
data = Encoding.ASCII.GetBytes(welcome)
server.SendTo(data, data.Length, SocketFlags.None, ipep)
Dim sender As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
Dim Remote As EndPoint = CType(sender, EndPoint)
data = New Byte(1024) {}
Dim recv As Integer = server.ReceiveFrom(data, Remote)
Console.WriteLine("Message received from {0}:", Remote.ToString)
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv))
While True
input = Console.ReadLine
If input = "exit" Then

17
' break
End If
server.SendTo(Encoding.ASCII.GetBytes(input), Remote)
data = New Byte(1024) {}
recv = server.ReceiveFrom(data, Remote)
stringData = Encoding.ASCII.GetString(data, 0, recv)
Console.WriteLine(stringData)
End While
Console.WriteLine("Stopping client")
server.Close()
End Sub
End Class

‫ق‬+T‫ ا‬:$‫ و‬UDP Connectionless Protocol ‫ ال‬I* D*."‫( ا‬T‫ء آ‬w)‫ا ا‬7‫ ه‬gh :$
... TCP Connection Oriented Protocol B$‫ﻩ و‬:$

18
Streaming & Threading Overview: 1.3

gh ‫ت‬,&O‫‰ ا‬7‫ ه‬I* D*."‫( ا‬T‫ آ‬:$‫ و‬TCP/IP ‫ و‬OSI ‫اء‬wH‫< أ‬-K ,$# :h+.P
Stream Library ‫ ال‬I* D*."‫( ا‬T‫ آ‬B& ‫ف‬1# ‫ء‬w)‫ا ا‬7‫ ه‬gh‫ و‬، ‫ت‬%&'‫*)ت ا‬+$
...(%&'‫*)ت ا‬+$ gh Thread ‫"!ام ال‬#‫( إ< ا‬hks$ Binary Data ‫ل‬#‫ر‬s

ioj B* ‫ ا&ت‬D, 3"; g"‫داة ا‬2‫ ا‬g‫ ه‬Socket‫ أن ال‬,$# :-9 Socket : ‫ ال‬: e‫أو‬
¬‫ ﺡ‬System.Net.Sockets ‹;+.P (;‫ ا&ا‬gh ‫م‬w-; i*‫"!ا‬#e‫ و‬+j‫ز إ< أ‬iH B*
i*‫"!ا‬#‫ ا‬3"; g"‫ وا‬Classes ‫ ال‬B* 3!k ‫د‬K <-K Namespaces ‫ا ال‬7‫ي ه‬1"‫;ﺡ‬
.¬t‫ ا‬DST‫ ا‬+^‫( ا‬%&'‫*)ت ا‬+$ gh

B* D*."‫( ا‬T‫ آ‬,$# :$ ¬‫ﺡ‬، Object ‫ أو‬Text D, B* Stream Classes‫ ال‬C:%/;
‫ء‬w)‫ا ا‬7‫ ه‬gh‫ و‬Stream Writer ‫ وال‬Stream Reader ‫"!ام‬#$ Text D,: Socket‫ال‬
‫رة‬1‫ن ﺹ‬1%; ‫ أن‬B%/;‫ ا&ت و‬B* +j‫ع أ‬1 ‫ )أي‬Object D,: ‫ﻩ‬.* D*."‫( ا‬T‫ آ‬B&:#
1‫ ه‬/‫ وآ‬،(.. Binary Data <‫ل إ‬1‫ أن ;ﺡ‬B%/; +jÀ ‫ء‬gV ‫ أو أي‬Voice ‫ت‬1‫ أو ﺹ‬Image
Object gh *‫ أ‬Binary <‫ إ‬3u ASCII Code<‫ إ‬Text ‫ل‬1‫ ﺡ‬:‫ آ‬Text ‫ ال‬D, gh ‫اﺡل‬
Name B* i‫ل إ‬1‫ﺹ‬1‫ ا‬3"; g"‫ وا‬Stream Classes ‫"!ام ال‬#$ ‫ﻩ‬.* D*."‫ ا‬3"h
Binary ‫ و ال‬Binary Reader‫< ال‬-K Classes ‰7‫ي ه‬1"‫ﺡ‬P‫ و‬System.IO Spaces
Stream ‫ وال‬Stream Reader ‫ وال‬Object ‫ أي‬I* D*."‫ ا‬B* C:%/P g"‫ وا‬Writer
I* D*."‫ ا‬Di‫ "ﺱ‬File Stream ‫ وال‬Text ‫ ال‬I* D*."‫ ا‬B* C:%/P g"‫ وا‬Writer
‫¶ ا&ت‬T‫ ﺡ‬Buffer ‫ﺱ"!م ك‬P g"‫ وا‬Memory Stream ‫( إ< ال‬hks$ ‫ت‬T-/‫ا‬
.gt‫ ا‬DST‫ ا‬+^‫ ا‬i&,"#‫ ا‬.$ ‫ أو‬i#‫ إر‬D&9

Binary ‫"!ام ال‬#$ Binary <‫ إ‬Object ‫ أي‬D;1‫ﺡ‬P <-K (&"%/‫‰ ا‬7‫ك ه‬K‫ﺱ‬P ¬‫ﺡ‬
‫ى‬+j‫ة أ‬+* ‫ﻩ‬-;1‫ﺡ‬P 3u Network Stream ‫"!ام‬#$ (%&'‫ ا‬+&K ‫ﻩ‬#‫ إر‬Di‫ "ﺱ‬Writer
‫ء‬:&$ ‫م‬1, ‫ف‬1# ‫ا‬7‫< ه‬-K g,&OP ‫ل‬t/‫ وآ‬، Binary Reader ‫"!ام‬#$ Object <‫إ‬
‫'ء‬ $ 39 ‫&ء‬-‫ و‬Client/Server +j‫ز إ< أ‬iH B* Image D, (-/.$ ‫م‬1,; —*+$
: g"‫ ا‬D%'‫ ا‬gh /‫; آ‬H ‫وع‬+'*

19
:("‫ ا‬Namespaces ‫( ال‬hk $ 39 (;‫ ا&ا‬gh
C #:
using System.Net.Sockets;
using System.IO;

VB.NET:
Imports System.Net.Sockets
Imports System.IO

MemoryStream ‫س‬o%‫ ا‬B* Instance ‫ق‬,"V‫ ا‬B* e‫ أو‬$ e ‫ل‬#‫ر‬s‫( ا‬-/K ‫اء‬+HÁ
,‫ﺡ‬e i1‫ ﺡ‬g% 9a* D%'$ ‫ة‬+‫اآ‬7‫ ا‬Dj‫رة دا‬1S‫ ا‬B;w!" i*!"‫ف ﺱ‬1# g"‫وا‬
<‫ إ‬Socket ‫ ال‬+&K NetworkStream ‫"!ام‬#$ i#‫ إر‬3u Binary (h1TS* <‫إ‬
:Server‫ز ال‬iH
C #:
try
{
‫رة‬1S$ ‫ﺡ; ا&ث ا!ص‬P
openFileDialog1.ShowDialog ();
string mypic_path =openFileDialog1.FileName ;
pictureBox1.Image = Image.FromFile(mypic_path);

MemoryStream ms = new MemoryStream();


pictureBox1.Image.Save(ms,pictureBox1.Image.RawFormat);
;$ ‫ع‬1:‫ ا‬B* (h1TS* gh i.k‫رة وو‬1S‫ ا‬B;w!P
byte[] arrImage = ms.GetBuffer();
ms.Close();
‫ﺡد‬/‫ ا‬Port‫ان وال‬1:.‫ ا‬+&K Server‫ز ال‬i)$ ‫ل‬SPe‫ا‬
TcpClient myclient = new TcpClient (txt_host.Text,5020);//Connecting with
server

20
VB.NET:
openFileDialog1.ShowDialog
Dim mypic_path As String = openFileDialog1.FileName
pictureBox1.Image = Image.FromFile(mypic_path)
Dim ms As MemoryStream = New MemoryStream
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat)
Dim arrImage As Byte() = ms.GetBuffer
ms.Close
Dim myclient As TcpClient = New TcpClient(txt_host.Text, 5020)

C #:
Server‫ز ال‬iH <‫( إ‬w!/‫رة ا‬1S‫ل ا‬#‫إر‬
NetworkStream myns = myclient.GetStream ();
BinaryWriter mysw = new BinaryWriter (myns);
mysw.Write(arrImage);//send the stream to above address

Stream ‫ﺱ( و ال‬-)‫ وا‬Socket‫ق ال‬od‫إ‬


mysw.Close ();
myns.Close ();
myclient.Close ();

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

VB.NET:
Try
Dim myns As NetworkStream = myclient.GetStream
Dim mysw As BinaryWriter = New BinaryWriter(myns)
mysw.Write(arrImage)
mysw.Close
myns.Close
myclient.Close
Catch ex As Exception
Msgbox(ex.Message)
End Try

Server ‫ ال‬: k


:S"‫( ا‬-/.$ ‫م‬1,; ‫ي‬7‫ وا‬Server‫ل‬$ ‫ء ا!ص‬w)‫ح ا‬+V ‫ء‬w)‫ا ا‬7‫ ه‬gh ‫أ‬$‫ف ا‬1#
Binary ‫"!ام ال‬#$ iP‫اء‬+9 ‫ و‬Socket ‫ ال‬+&K Stream ‫&ل ال‬,"#‫ وا‬Port‫< ال‬-K
gh ، ‫ى‬+j‫ة أ‬+* (‫ل‬#‫ر‬s‫ ا‬D&9 i-K ‫ آن‬g"‫ )ﺹ"ﻩ ا‬%)$‫ﻩ إ< او‬-;1‫ﺡ‬P‫ و‬Reader
‫;ة‬H ‫ﺹ‬Sj  ‫ اوت‬:; ‫ت‬+h‫‰ اﺡ( و‬7‫ ه‬gh‫رة و‬1‫&ل ﺹ‬,"#‫; ا‬+ ‫ل‬t/‫ا ا‬7‫ه‬
‫ ا!ﺹ( ب ال‬Image.FromStream (‫ﺹ‬j i:/k B*‫ و‬ih ‫دة‬1H1/‫ ا‬Controls ‫ ال‬gh
g% Stream ‫ل‬oj B* (-#+/‫رة ا‬1S‫ض ا‬+K (%*‫ إ‬:-K Di‫ﺱ‬P g"‫ وا‬PictureBox
‫ل‬t/‫ ا‬+^‫ ا‬Picturebox ‫< ال‬-K ‫ض‬+.P ‫رة‬1‫ إ< ﺹ‬Binary Stream B* i-;1‫ﺡ‬P 3";
: g"‫ا‬

21
C #:
using System.Net.Sockets ;
using System.IO;

// Objects Declaration
TcpListener mytcpl; // Declare TCP Listener
Socket mysocket; // Declare an object from Socket Class
NetworkStream myns; //
StreamReader mysr;
void Image_Receiver()
{

mytcpl = new TcpListener (5000);// Open The Port


mytcpl.Start ();// Start Listening on That Port
mysocket = mytcpl.AcceptSocket ();// Accept Any Request From Client and
Start The Session

myns = new NetworkStream (mysocket);// Receive The Binary Data From


Port
pictureBox1.Image = Image.FromStream(myns); // Show The Image that
Resaved as Binary Stream
mytcpl.Stop();// Close TCP Session

if (mysocket.Connected ==true)//if Connected Start Again


{

while (true)
{
Image_Receiver();// Back to First Method
}
}
}

VB.NET:
Private mytcpl As TcpListener
Private mysocket As Socket
Private pictureBox1 As System.Windows.Forms.PictureBox
Private mainMenu1 As System.Windows.Forms.MainMenu
Private menuItem1 As System.Windows.Forms.MenuItem
Private saveFileDialog1 As System.Windows.Forms.SaveFileDialog
Private myns As NetworkStream

Sub Image_Receiver()
mytcpl = New TcpListener(5000)
mytcpl.Start()
mysocket = mytcpl.AcceptSocket
myns = New NetworkStream(mysocket)
pictureBox1.Image = Image.FromStream(myns)
mytcpl.Stop()
If mysocket.Connected = True Then
While True

22
Image_Receiver()
End While
End If
End Sub

: g"‫ ا‬D%'‫ ا‬gh /‫; آ‬H ‫وع‬+'* ‫'ء‬ $ 39 ¨&O"‫و‬

‫ ال‬Ik1$ iK"#$ 39 3u —*+&‫ ا‬class gh (,$‫ اﺱ‬method ‫‹ ال‬k‫أ‬


D'"‫أ ا‬$ ‫ﺡث‬$ ‫*— أو‬+&$ ‫ ا!ص‬Constructer ‫ ال‬gh *‫ا‬Image_Receiver()
: Form ‫ل‬$ ‫ ا!ص‬Closing ‫ ﺡث ال‬gh ("‫د ا‬1t/‫ و ا‬، Form ‫ل‬$ ‫ا!ص‬
C #:
private void Form1_Closing(object sender,
System.ComponentModel.CancelEventArgs e)
{
try
{
mytcpl.Stop ();
Application.Exit();
}
catch (Exception ex) {MessageBox .Show (ex.Message );}
}

VB.NET:
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs)
Try
mytcpl.Stop()
Application.ExitThread()
Application.Exit()
Catch ex As Exception
Msgbox(ex.Message)
End Try
End Sub
..، —*+&‫ء ا‬i‫ إ‬:K Socket‫ق ال‬od‫ إ‬B* ‫آ‬G" C‫وذ‬

23
:(-&,"‫ﺱ‬/‫رة ا‬1S‫ ا‬B;w!P B* B%/"P g% Save Button ‫ إ< ال‬g"‫د ا‬1%‫( ا‬hk $ 39

C #:
try
{

saveFileDialog1.Filter = "JPEG Image (*.jpg)|*.jpg" ;


if(saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string mypic_path = saveFileDialog1.FileName;
pictureBox1.Image.Save(mypic_path);
}
}
catch (Exception){}

VB.NET:

Try
saveFileDialog1.Filter = "JPEG Image (*.jpg)|*.jpg"
If saveFileDialog1.ShowDialog = DialogResult.OK Then
Dim mypic_path As String = saveFileDialog1.FileName
pictureBox1.Image.Save(mypic_path)
End If
Catch generatedExceptionVariable0 As Exception
End Try
: Threading Overview
Loop ‫*— واﺱ&† أن ال‬+&‫¨ ا‬-.P <‫‰ إ‬:.k‫ي و‬7‫ وا‬Infinity Loop ‫دي ال‬a; ‫ف‬1#
.$ e‫ء إ‬gV 7T:; B ‫ إذ‬Form D (SS!/‫ وا‬Global Area ‫( ال‬,O:* <-K D/.;
D‫ اوت  اﺡ‬: *9 ، Infinity Loop ‫ا إذ اﻩ‬$‫ ;ﺡث أ‬B * 1‫ وه‬Loop ‫ء ال‬i"‫ا‬
()./$ /‫ﺱ‬P g"‫ وا‬Threading ‫ ال‬H11:%P ‫"!ام‬#$ g‫( وه‬-%'/‫‰ ا‬7i
D/K‫— و‬./‫< ا‬-K ‫م‬i/‫ ا‬3‫ﺱ‬,P ‫ل‬oj B* C‫— وذ‬./‫ﺱ ا‬T <-K (;‫از‬1"/‫ا‬
—*+&‫ ا‬+ua; e :‫ وه‬..Multitasking ‫ل‬$ </‫ * ;ﺱ‬1‫*— وه‬+$ D% (-ST:* Session
‫ ال‬BK DST:* Thread gh D/."# Loop ‫ أن ال‬/‫ آ‬+&‫ آ‬D%'$ ‫^م‬:‫ارد ا‬1* <-K
: g"‫ ا‬D%'‫ ا‬+^‫ ا‬Form ‫ل‬$ ‫ ا!ص‬Thread

24
1‫ا ه‬7‫ وه‬Global Area ‫( ال‬,O:* <-K D/.; Loop ‫ آن‬Thread ‫( ال‬hk‫ إ‬D&9 ‫ﺡ¶ اﻩ‬e
¬‫ﺡ‬$ Loop D ‫ص‬j Session D/K 3P Thread ‫"!ام ال‬#‫ ا‬.$‫&† ا&>ء ا'; و‬#
.. —*+&‫ ا‬I* ‫ازي‬1"* D%'$ D/.;

: System.Threading Namespace ‫;‹ ال‬+.P e‫م أو‬w-; Thread ‫"!ام ال‬#e‫و‬

C #:
using System.Threading;

VB.NET:
imports System.Threading

‫ ال‬gh i Thread D/K ;+P g"‫د ا‬1t/‫ ا‬3#‫ﻩ وإدراج ا‬:* Instance ‫ق‬,"V‫ ا‬3u
: g-; /‫ آ‬i$ ‫ ا!ص‬Delegate

C #:
Thread myth;
myth= new Thread (new System.Threading .ThreadStart(Image_Receiver));
myth.Start ();

VB.NET:
Imports System.Threading

Dim myth As Thread


myth = New Thread(New System.Threading.ThreadStart(Image_Receiver))
myth.Start

g-; /‫ آ‬Closing Form ‫ ﺡث ال‬gh Application.ExitThread (hk $ 39 ‫ن‬e‫أ‬

25
C #:
private void Form1_Closing(object sender,
System.ComponentModel.CancelEventArgs e)
{
try
{
mytcpl.Stop ();
Application.ExitThread ();
Application.Exit();
}
catch (Exception ex) {MessageBox .Show (ex.Message );}

VB.NET:
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs)
Try
mytcpl.Stop()
Application.ExitThread()
Application.Exit()
Catch ex As Exception
Msgbox(ex.Message)
End Try
End Sub

91‫ﺱ ا‬T gh‫ و‬Thread B* +t‫ أآ‬D'P B* C:%/P ‫ا إذ‬H (.‫ را‬Thread ‫ة ال‬w*
‫ﺡﻩ‬+V <-K gPÇ# ‫ي‬7‫ وا‬Multithreading ‫ل‬$ </‫ * ;ﺱ‬1‫*— وه‬+&‫ﺱ ا‬T gh‫و‬
.‫"ب‬%‫ ا‬B* (9‫ر‬1‫ﺱ!( ا‬:‫ ا‬gh DST"$

26
Multicasting Group o
‫ ﻉ‬C*‫ﺩا‬p‫ وا‬IP Multicasting :1.4

¬‫ ﺡ‬#‫ود آ‬+$ D/. ‫"!ا*ﻩ‬#‫( ا‬T‫ آ‬:‫ﺡ‬+V‫ و‬UDP ‫ل ال‬1‫آ‬1P+$ BK ,$# :u‫ﺡ‬P
‫*ﻩ‬w-; ‫ي‬7‫ وا‬IPAddress.Any ‫"!ام‬#$ *‫ إ‬B",;+O$ #‫ود آ‬+&‫ ا‬D/K IO"‫ﺱ‬P
‫ﻩ أي‬oj B* D&,"‫ﺡد ﺡ¬ ;ﺱ‬/‫ ا‬Port‫< ال‬-K :S"‫( ا‬-/.$ ‫م‬1,; Server ‫د‬1H‫و‬
B* ‫ي‬7‫ وا‬IPAddress.Broadcast ‫"!ام‬#$ ‫ة أو‬wiH2‫ ا‬D‫ إ< آ‬it&$ ‫م‬1,; 3u (#‫ر‬
‫ﺡ¬ أن‬$ Server ‫ز‬iH ‫د‬1H1 ‫ورة‬+k e ¬‫ة ﺡ‬wiH2‫ ا‬D‫¬ إ< آ‬$ D/K B%/; ‫ﻩ‬oj
<‫( إ‬#‫ أي ر‬ioj B* D#+;‫ و‬D&,"‫ﺡد و ;ﺱ‬/‫ ا‬Port ‫< ال‬-K :S"‫ﻩ ا‬:%/; D%‫ا‬
I/"‫ ;ﺱ‬I/)‫ ﺡ¬ أن ا‬gK‫ذا‬s‫( ا&¬ ا‬-/K Broadcast ‫( ال‬-/K ‫'&ﻩ‬P‫ة و‬wiH2‫ ا‬D‫آ‬
†); ‫ه‬:K ‫ت‬K1/)* <‫ل إ‬#‫ر‬s‫ ا‬3‫ﺱ‬,P ‫ أ* إذا أرد‬، D%‫ إ< ا‬D#+;‫ و‬D%‫ ا‬B*
، Multicast Group ‫ ال‬D/. ‫"!ا*ﻩ‬#‫ف ا‬i$ C‫ وذ‬IP Multicasting ‫"!ام ال‬#‫ا‬
‫ ﻩ‬SSj ‫ا‬7i‫ت و‬%&'‫*)ت ا‬+$ gh ‫ا‬H (/i/‫ ا‬Ik‫ا‬1/‫ ا‬B* ‫ع‬1k1/‫ا ا‬7‫ ه‬+&".;
Conferences ‫*)ت ال‬+$ †-d‫( إذ أن ا‬I$‫ا‬+‫ ا‬DST‫ ا‬+^‫( )ا‬,&‫ ا‬BK DST:* DSh
B* (K1/)* <‫ل إ‬#‫ر‬s‫< اﻩ ا‬-K Multicast ‫ف‬+.;‫ و‬+&‫ آ‬D%'$ ‫ﻩ‬-K /".P
‫ز‬iH C:‫ن ه‬1%; ¬‫ ﺡ‬Client/Server ‫"!ام‬#$ Managed ‫اء آن‬1# B*!"‫ﺱ‬/‫ا‬
<‫ إ‬i#‫ إر‬3u Clients Group ‫ ال‬B* D#+‫&ل ا‬,"#‫"ﻩ ا‬T„‫( و‬%&'‫ ا‬gh Server
: g"‫ ا‬D%'‫ إ< ا‬+^‫ى ا‬+j‫ة أ‬+* (K1/)/‫ ا‬D*‫آ‬

¨h‫ وإذا وا‬Clients ‫ ال‬D&9 B* (K1/)/‫م إ< ا‬/‚e‫† ا‬-m ‫ل‬#‫ إر‬3"; ‫ﺡ¶ اﻩ‬e
‫ﻩ‬$ (‫ ا!ﺹ‬IP Address List ‫ز إ< ال‬i)‫ان ا‬1:K 3‚$ ‫م‬1,; †-O‫< ا‬-K Server‫ال‬
‫‚ء‬K‫ أ‬I/H <‫ل إ‬#‫ر‬s‫ ا‬3";‫ و‬IP Multicast ‫ﺱ ال‬T:$ (K1/)* D‫ك آ‬+"'P‫و‬
B$* 1‫ وه‬Class D ‫ ال‬B/k I,; ‫ي‬7‫ وا‬IP Multicast ‫ ال‬gT:$ ‫ك‬+"'P g"‫( ا‬K1/)/‫ا‬
.,$#

D‫ ﺡ¬ أن آ‬peer-to-peer Technique - unmanaged ‫ل‬$ </‫ و;ﺱ‬gt‫ع ا‬1:‫ا‬


‫ﺹ‬S!* ‫ي‬w‫آ‬+* Server ‫ز‬i) ‫د‬1H‫ و‬e‫ و‬91‫ﺱ ا‬T gh client ‫ و‬server ‫ ك‬D/.; ‫ز‬iH
(K1/)/‫م إ< ا‬/‚e‫† ا‬-m <-K (,h‫ا‬1/‫ ا‬3"P ¬‫ ﺡ‬I;‫ز‬1"‫&ل وا‬,"#e‫( ا‬-/.
‫&ل و‬,"#e‫ ا‬3u ‫م‬/‚e‫ ا‬gh ¨‫( ﻩ اﺡ‬K1/)/‫ ا‬gh ‫ز‬iH ‫ وأي‬g,-P D%'$
: g"‫ ا‬D%'‫ﺡ¶ ا‬e (K1/)/‫ ا‬D*‫ل إ< آ‬#‫ر‬s‫ا‬

27
IP Multicast Address ‫ل‬$ </‫ * ;ﺱ‬1‫ وه‬Multicasting D (‫ﺹ‬j B;‫و‬:K ‫ﺹ‬S!P 3P
: g-; /‫ آ‬g‫وه‬

LAN (-‫ﺡ‬/‫ت ا‬%&' 224.0.0.255 <‫ إ‬224.0.0.0 B* ‫ى‬/‫ا‬


Internetwork D 224.0.1.255 <‫ إ‬224.0.1.0 B* ‫ى‬/‫ا‬
AD-HOC Network block D 224.0.255.255 <‫ إ‬224.0.2.0 B* ‫ى‬/‫ا‬

¬‫ ﺡ‬Socket Namespace ‫"!ام ال‬#$ IP Multicast D +&‫ آ‬3K‫* اوت  د‬9
‫ت‬-/K ‫دارة‬ $ ‫م‬1,P g"‫ وا‬SetSocketOption ‫د‬1t/‫"!ام ال ا‬#$ iT;+.P 3";
‫ﺱ"!م‬P /‫ ( آ‬leave & join) multicast group (K1/)/‫ وا< ا‬B* ‫وج‬+!‫م وا‬/‚e‫ا‬
‫ و ;ﺱ"!م ال‬DropMembership ‫ و‬AddMembership (;1‚.‫( وإء ا‬hks
‫ﻩ‬oj B* ‫&ل ا&ت‬,"#‫ ا‬3"# ‫ي‬7‫ وا‬Port‫ ال‬39‫ "ﺡ; ر‬UdpClient Object
‫ف‬1# g"‫ت ا‬i)‫ﺡد ا‬P ‫ﻩ‬oj B* ‫ي‬7‫ وا‬IP Multicasting ‫;‹ ال‬+.P <‫( إ‬hks$
¬‫ ﺡ‬LAN (-‫ﺡ‬/‫ت ا‬%&'$ ‫ ا!ص‬Range IP ‫ﺡ; ال‬P ‫ل‬oj B* (#+‫ ا‬D&,"‫ﺱ‬P
IP Multicast ‫ﺱ ال‬T ‫ و;ﺱ"!م‬Port‫ا ال‬7‫< ه‬-K S:"; ‫!ﺹ‬V ‫ أي‬IO"‫;ﺱ‬
¬‫ﺡ‬$ ‫ت‬iH ‫ة‬K <‫( إ‬#‫ل ر‬#‫ر‬s g"‫د ا‬1%‫ ;ﺱ"!م ا‬، (#+‫‰ ا‬7‫&ل ه‬,"#‫ا‬
:‫ل‬t/‫ آ‬224.100.0.1 Group ‫ ال‬B/k ‫ و‬5020 Port‫ ال‬39‫ﺱ"!م ر‬
C #:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class MultiSend
{
public static void Main()
{
Socket server = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse("224.100.0.1"),
5020);
byte[] data = Encoding.ASCII.GetBytes("This is a test message");
server.SendTo(data, iep);
server.Close();
}
}

28
VB.NET:
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Class MultiSend

Public Shared Sub Main()


Dim server As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Pars("224.100.0.1"),
5020)
Dim data As Byte() = Encoding.ASCII.GetBytes("This is a test message")
server.SendTo(data, iep)
server.Close()
End Sub
End Class

g‫( وه‬#+‫ ا‬D&,"‫ﺱ‬P ‫ف‬1# g"‫( ا‬i)‫"ﺡ; ا‬$ Socket‫;‹ ال‬+."$ :/9 (;‫ ا&ا‬gh
;‫ﺡ‬P 3u (‫ﺡد‬/‫ ا‬IP Multicast Group ‫"!ام ال‬#$ (%&'‫< ا‬-K S:"; ‫!ﺹ‬V ‫)أي‬
IP ‫ ال‬Ik1$ C‫ف وذ‬i‫( ا‬O, ;‫ﺡ‬P C‫ ذ‬.$‫ و‬، ‫ﺱ"!م‬/‫ل ا‬1‫آ‬1P+&‫ وا‬Socket‫ع ال‬1
:‫ﻩ‬oj B* ‫&ل ا&ت‬,"#‫ ا‬3"# g"‫ ا‬Port‫ ال‬39‫ﻩ ر‬.&";‫; و‬+ ‫ي‬7‫ ا‬Multicast

‫ﺱﻩ و‚‹ ال‬T Socket ‫;‹ ال‬+.P ‫ف ﺱ"!م‬1# ‫&ل‬,"#e‫*— ا‬+$ ‫'ء‬s‫و‬
:‫ﻩ‬-K :S"‫; ا‬+ g"‫ ا‬Port‫ ال‬39‫ ﻩ ر‬:‫ وﺱ‬UdpClient Object

C #:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class UdpClientMultiRecv
{
public static void Main()
{
UdpClient sock = new UdpClient(5020); // ‫ ال‬39‫< ر‬-K :S"‫ا‬Port‫ا‬7‫ه‬
sock.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"), 50);
‫ﺡد‬/‫ى ا‬/‫< ا‬-K :S"P ‫ف‬1# C‫ ا‬g:.; ‫ا‬7‫وه‬

IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);

// ;$ ‫ع‬1:‫ ا‬B* (h1TS* gh (#+‫&«( ا‬.P‫&ل ا&ت و‬,"#‫ا‬


byte[] data = sock.Receive(ref iep);

// (V'‫< ا‬-K (#+‫( ا‬K&m 3u ‫د‬1‫ آ‬g%#‫ إ< أ‬D;1‫ا"ﺡ‬


string stringData = Encoding.ASCII.GetString(data, 0, data.Length);
Console.WriteLine("received: {0} from: {1}", stringData, iep.ToString());
sock.Close();}}

29
VB.NET:
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text

Class UdpClientMultiRecv

Public Shared Sub Main()


Dim sock As UdpClient = New UdpClient(5020)
sock.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"), 50)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
Dim data As Byte() = sock.Receive(iep)
Dim stringData As String = Encoding.ASCII.GetString(data, 0,
data.Length)
Console.WriteLine("received: {0} from: {1}", stringData, iep.ToString)
sock.Close()
End Sub
End Class

B;‫د‬1%‫"!ام ا‬#‫ ا‬B%/; /‫ آ‬i#‫&ل ا&ت و إر‬,"#e ‫دة‬."* ‫ق‬+m H1P ‫ﺡ¶ اﻩ‬e
<‫ إ‬Image ‫ل‬#‫ إر‬C:%/; /‫&ل آ‬,"#e‫ل و ا‬#‫ر‬Á —*+&‫ﺱ ا‬T gh B,$‫اﺱ‬
C-K * ‫ إذ‬Binary <‫ﻩ إ‬-;1‫ﺡ‬P B%/; +j‫ء أ‬gV ‫( أو أي‬I$‫ا‬+‫ ا‬DST‫ ا‬+^‫ﺹ ) ا‬:‫† ا‬H
<‫ إ‬Binary Writer ‫ وال‬Binary Reader ‫ وال‬memory Stream ‫( ال‬hk‫ى إ‬1#
‫ت‬iH <‫ا إ‬+*%‫ ا‬+&K ‫رة‬1‫ل ﺹ‬#‫ر‬s —*+$ D/K C:%/; /‫&ل آ‬,"#e‫ل و ا‬#‫ر‬s‫د ا‬1‫آ‬
... I$‫ا‬+‫ ا‬DST‫ ا‬gh i‫ﺡ‬+V <-K gPÇ# g"‫ﺱ ا!ﺹ( وا‬T ‫"!ام‬#$ ‫دة‬."*

30
Dot Net Networks & TCP/IP Programming

Chapter 2
Streaming in Dot Net

2- Managed I/O: Streams, Readers, and Writers

A. Stream Classes
B. Stream Members
C. Stream Manipulation
D. Simple Remote Control Application Using
StreamReader & StreamWriter Classes

31
\>‫\ ا[ ا>
] ا‬

: Managed I/O: Streams, Readers, and Writers : 2.1

Streams Library ‫"!ا*ت ال‬#‫ ا‬BK ‫م‬K D%'$ ‫ول‬2‫ء ا‬w)‫ ا‬gh ,$# :u‫ﺡ‬P
‫ل‬#‫ر‬ $ :/9 ‫ل‬t/‫ وآ‬+jÀ <‫ز إ‬iH B* Text Data ‫ و‬Binary Data ‫ل‬#‫ر‬s i*‫"!ا‬#‫وا‬
.. Binary Reader & Binary Writer ‫"!ام ال‬#$ Server ‫ إ< ال‬Client ‫ ال‬B* ‫رة‬1‫ﺹ‬
<‫ن إ‬%* B* ‫ ا&ت‬D, (-/K Di‫ﺱ‬P 1‫ ه‬Stream ‫"&ت ال‬%* ‫ إ'ء‬B* ‫ف‬i‫إن ا‬
‫ت أو‬T-/‫ ا‬I* D*."$ ‫ اﺡل‬1‫ ه‬/‫ز آ‬i)‫ﺱ ا‬T Dj‫( أو دا‬%&'‫ ا‬+&K ‫اء‬1# +j‫أ‬
:-K Di‫ﺱ‬P ¬‫ ﺡ‬+P1&/%$ ‫ل‬1‫ﺹ‬1* +jÀ ‫ز‬iH ‫( أو‬h+m ‫( أو أي‬.$O‫ ا‬I* D*."‫ا‬
‫ آ‬g"‫ ا‬D‫'آ‬/‫ ا‬B* +t%‫ ا‬D‫ * ﺡ‬1‫ وه‬i#‫ وإر‬Byte Array <‫ إ‬i-;1‫ﺡ‬P (-/K
.. Binary Data I* D*."‫ ا‬gh B)*+&/‫ﻩ ا‬H‫ا‬1P
B*‫ا‬w"* +‫ وا‬Synchronous B*‫ا‬w"/‫ ا‬B$1-#G$ Stream ‫ ال‬I* D*."‫ ا‬B%/;
B*‫ا‬w"/‫ب ا‬1-#2$ IO Streams ‫ ال‬I/H D/.P gk‫ا‬+"h‫ ا‬D%'$‫ و‬Asynchronous
Processing ‫ق ال‬od $ ‫م‬1,; ‫^م إذ‬:‫< أدا( ا‬-K ;'‫‰ ا‬+uGP 1‫ﻩ ه‬h †.‫ ا‬B‫آ‬e
.$ e‫ إ‬+jÀ +*‫ أي أ‬7T:"$ /‫ ;ﺱ‬e ¬‫ﺡ‬$ —*+&- (SS!/‫ ا‬Thread ‫ ال‬gh Unit
:‫ ﺡ( إذا آ‬gh B*‫ا‬w"/‫ب ا‬1-#2‫"!ام ا‬#‫ ا‬À$‫ ا‬S:; e‫( ا)ر;( و‬-/.‫ ا‬B* ‫ء‬i"e‫ا‬
Magnetic Tape ‫ أو ال‬Floppy Disk ‫ ال‬Dt* &‫«( ﺱ‬O$ ($"‫اءة وآ‬+9 ‫ة‬wiH‫ أ‬I* D*."P
Real Time ‫ أو ال‬g,,‫ اﺡ‬B*w‫( ا‬/^‫< أ‬-K /".P g"‫*)ت ا‬+&$ ‫ا‬H (/i* i:%
1‫&ل ا&ت وه‬,"#‫ل وا‬#‫( إر‬-/K gh B*‫ا‬w"/‫ب ا‬1-#2‫ ا‬/".P i‫ ﺡ¬ أ‬Systems
i-K (-t*2‫ ا‬B*‫ و‬+*2‫ ا‬7T:P B* ‫ء‬i"e‫ ا‬B‫ى إ< ﺡ‬+j‫( أ‬-/K ‫ي‬G$ ‫م‬,‫ ا‬I:/; *
(9O$ B‫ﺡ‬V ‫ أو‬+‫اآ‬7"‫ ا‬w)‫( ﺡ‬/^‫ أو أ‬g%:&‫ﺹ ا‬+‫ ا‬gh ‫;اع‬s‫( اﺱﺡ† أو ا‬/^‫أ‬
(,$‫اص اﺱ‬1!‫د ا‬1H‫ ;ﺡ"ج إ< و‬e C)*+$ ‫ ﺡ( إذا آن‬gh .&m .. ‫ه‬+d‫‹ و‬Pi‫ا‬
B* IO"‫ﺱ‬P ¬‫ ﺡ‬Asynchronous B*‫ا‬w"* +‫ب ا‬1-#2‫"!ام ا‬#$ S:; ‫ه‬:K
(-/.‫ء ا‬i‫"^ر إ‬e (H‫ون اﺡ‬$‫)( و‬./‫ وﺡة ا‬gh ‫ى‬+j‫ت أ‬-/K 7T:P ‫ﻩ‬oj
+ua; e /* ‫اج‬+j‫ل أو إ‬j‫† إد‬-m (-/K D% Separate thread ‫ إ'ء‬3"; ‫ا)ر;( إذ‬
‫ل‬oj B* ‫ى‬+)P ($"%‫اءة أو ا‬+,‫( ا‬-/K ‫"!ا*ﻩ إذا آ‬#$ S:;‫^م و‬:‫< أدا( ا‬-K
 ‫ اوت‬gh B*‫ا‬w"* +‫ ا‬BK B*‫ا‬w"/‫د ا‬1t/‫ ا‬w/P B%/;‫«( ﺱ& و‬O$ ‫ة‬wiH‫أ‬
i-K ‫ل‬t/‫ وآ‬B*‫ا‬w"* +‫د ا‬1t/‫ ا‬3#‫ا;( ا‬$ gh End ‫ أو‬Begin (/-‫د آ‬1H1$
.. EndRead ‫ و ال‬EndWrite ‫ و ال‬BeginRead ‫ و‬BeginWrite

Stream Classes :v‫أو‬

‫ﺡ‬P (H‫ر‬:/‫ وا‬Classes ‫ ال‬B* (K1/)/$ Streams ‫ت ال‬-/K  ‫ اوت‬3KP
. ‫ ا&ت‬D,: ‫اج‬+js‫ل و ا‬j‫د‬s‫ت ا‬-/. ‫ﺱ"!م‬P g"‫ وا‬System.IO Name Space
i-K (-t*2‫ ا‬B*‫ و‬، Backing storage ، Stream Classes ‫‡ ال‬.$ ‫ﺱ"!م‬P
e i‚.$ ‫ن‬ h C7‫ وآ‬MemoryStream ‫ وال‬BufferedStream ‫ و ال‬FileStream
‫ﺱ"!م‬P g"‫ وا‬NetworkStream ‫ ال‬i-K (-t*2‫ ا‬B*‫ و‬Back Storage ‫;ﺱ"!م أي‬
‫ ال‬3‫ﺱ‬,P ‫ و‬، Backing Storage ‫"!ام‬#‫ون ا‬$‫( و‬%&'‫ ا‬+&K Stream ‫ ال‬D,:
: g"‫ ا‬D%'‫ ا‬gh /‫ اوت  آ‬gh Stream Classes

32
‫ة‬+‫اآ‬7‫ ا‬B* B.* ‫ار‬,* w)‫ ﺡ‬g##‫ أ‬D%'$ ‫ و;ﺱ"!م‬: BufferedStream Class -1
B‫ "ﺡﺱ‬Buffering ‫*)ت ال‬+&‫‡ ا‬.$ ‫ﺱ"!م‬P /‫( آ‬:.* (-/K 7T:" 9a* D%'$
i-K ‫ل‬t/‫&ل وآ‬,"#e‫ل أو ا‬#‫ر‬s‫)( و ا‬./‫ ا‬B$ (O#‫ة و‬+‫اآ‬7‫ن آ‬1%P ‫دا( ﺡ‬2‫ا‬
i"K&m ‫اد‬+/‫ ا&ت ا‬B;w!" (O#‫ة و‬+‫( ذاآ‬.$O‫ﺱ"!م ا‬P ¬‫( ﺡ‬K&O‫*)ت ا‬+$
g"‫ت ا‬-/.‫ ا‬gh Buffering ‫"!ام ال‬#‫ ا‬B* g##2‫ف ا‬i‫ ا‬B/%; ، 9a* D%'$
‫)( ا&ت‬.* 3"; ¬‫اج ﺡ‬+js‫ل و ا‬j‫د‬s‫ت ا‬-/K B* ‫ع‬+#‫— أ‬./‫ ا‬ih ‫ن‬1%;
D%'$ (‫دا‬2‫ ا‬B‫ﺡﺱ‬P gh 3‫ * ;ﺱه‬1‫ وه‬i#‫ ا"^ر إر‬gh Buffer ‫ ال‬gh i.k‫وو‬
‫ ال‬I* ‫ت‬%&'‫*)ت ا‬+$ gh P‫د‬K BufferedStream ‫ و;ﺱ"!م ال‬، +&‫آ‬
e ¬‫ة ﺡ‬+‫اآ‬7‫ ا‬gh (%&'‫ ا‬+&K i#‫اد إر‬+/‫ ا&ت ا‬B;w!" NetworkStream
.. ,$# +‫ ذآ‬/‫ آ‬Backing storage ‫س‬o%‫ا ا‬7‫;ﺱ"!م ه‬

B%/;‫ و‬BufferedStream ‫"!ام ال‬#‫ ا‬:K 4096 bytes w)‫ ﺡ‬3"; gk‫ا‬+"h‫ ا‬D%'$
: ‫ل‬t/‫ آ‬g-; /‫ آ‬BufferedStream ‫ و;ﺱ"!م ال‬.. (H‫ ﺡﺱ† اﺡ‬i--,P ‫ أو‬iP‫ز;د‬

C#
using System;
using System.Text;
using System.IO;
namespace Network_Buffering
{
class Program
{
static void Main(string[] args)
{
ASCIIEncoding asen = new ASCIIEncoding();
byte[] xx = asen.GetBytes("Hello Buffering");

33
MemoryStream ms = new MemoryStream(xx);
readBufStream(ms);
}
public static void readBufStream(Stream st)
{
// Compose BufferedStream
BufferedStream bf = new BufferedStream(st);
byte[] inData = new Byte[st.Length];

// Read and display buffered data


bf.Read(inData, 0, Convert.ToInt32(st.Length));
Console.WriteLine(Encoding.ASCII.GetString(inData));
}
}
}

VB.NET:
Imports System
Imports System.Text
Imports System.IO
Namespace Network_Buffering

Class Program

Shared Sub Main(ByVal args As String())


Dim asen As ASCIIEncoding = New ASCIIEncoding
Dim xx As Byte() = asen.GetBytes("Hello Buffering")
Dim ms As MemoryStream = New MemoryStream(xx)
readBufStream(ms)
End Sub

Public Shared Sub readBufStream(ByVal st As Stream)


Dim bf As BufferedStream = New BufferedStream(st)
Dim inData(st.Length) As Byte
bf.Read(inData, 0, Convert.ToInt32(st.Length))
Console.WriteLine(Encoding.ASCII.GetString(inData))
End Sub
End Class
End Namespace

gh ‫ﻩ‬-/‫ﺡ‬P‫ و‬ASCIIEncoding ‫"!ام ال‬#$ Byte Array <‫ ﺹ إ‬D;1‫"ﺡ‬$ :/9 ¬‫ﺡ‬
¬‫ه ﺡ‬G'‫ ا‬g"‫ وا‬readBufStream ‫د‬1t/‫‰ إ< ا‬:-#‫ ار‬3u MemoryStream ‫ ال‬+&K
‫س ال‬o%‫ﺱ"!ام ا‬$ ("9a* ‫ة‬+‫ ذاآ‬gh ‰:-/‫ وﺡ‬Stream ‫ ال‬ioj B* :-&,"#‫ا‬
‫ﺱ"!ام‬$ ‫ى‬+j‫ة ا‬+* ‫ﻩ إ< ﺹ‬-;1‫ﺡ‬P .$ ‫ﻩ‬P;1"‫( *ﺡ‬K&O$ :/9 3u BufferedStream
.. ‫"ﻩ‬K&m‫ و‬Encoding.ASCII‫ال‬

H D‫ آﺡ‬+&".; ‫( إذ‬,$‫ اﺱ‬Buffring ‫( ال‬-/.$ ‫&ﻩ‬V 1‫ وه‬: MemoryStream Class -2
BK C:; ¬‫&ل ﺡ‬,"#2‫ل أو ا‬#‫ر‬s‫ ا‬D&9 ‫ة‬+‫اآ‬7‫ ا‬gh 9a* D%'$ ‫ ا&ت‬B;w!"
‫ل‬t/‫ آ‬g-; /‫ و;ﺱ"!م آ‬+&‫ آ‬D%'$ (-/.‫ع ا‬+‫ ;ﺱ‬/* ‹-* D%V <-K i:;w!P
: ‫ة‬+‫اآ‬7‫ ا‬gh ‫رة‬1‫ ﺹ‬B;w!" i:*!"#‫ﺡ¬ ا‬

34
C#
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[] arrImage = ms.GetBuffer();


ms.Close();

VB.NET:
Dim ms As MemoryStream = New MemoryStream
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim arrImage As Byte() = ms.GetBuffer
ms.Close

‫ ال‬I* D*."$ ‫م‬1,P ¬‫ ﺡ‬، ,$# i*‫"!ا‬#$ :/9 /‫ وآ‬: NetworkStream Class -3
Name B* iK"#‫ ا‬3";‫ و‬Socket ‫"!ام ال‬#$ (%&'‫ ا‬+&K ‫ﻩ‬#‫ر‬s Stream
e ‫ إذ‬unbuffered ‫ﻩ‬G$NetworkStream ‫س‬o%‫ ا‬+&".;‫ و‬System.Net.Sockets Spaces
‫ﻩ‬.* BufferedStream Class ‫"!ام ال‬#‫ ا‬D‚T;‫ و‬Backing Storage <-K ‫ي‬1"‫;ﺡ‬
i:;w!"$ :/9 g"‫رة ا‬1S‫ل ا‬#‫; إر‬+ ¬‫ل ﺡ‬t/‫ آ‬g-; /‫ﺱ"!م آ‬P‫داء و‬2‫ ا‬B‫"ﺡﺱ‬
: Socket ‫ ال‬+&K +j‫ز أ‬iH <‫ة إ‬+‫اآ‬7$ ¨$‫ل اﺱ‬t/‫ ا‬gh

C#
TcpClient myclient = new TcpClient (“localhost”,5020);//Connecting with
server

NetworkStream myns = myclient.GetStream ();

BinaryWriter mysw = new BinaryWriter (myns);


mysw.Write(arrImage);//send the stream to above address
mysw.Close ();
myns.Close ();
myclient.Close ();

VB.NET:
Dim myclient As TcpClient = New TcpClient(localhost, 5020)
Dim myns As NetworkStream = myclient.GetStream
Dim mysw As BinaryWriter = New BinaryWriter(myns)
mysw.Write(arrImage)
mysw.Close
myns.Close
myclient.Close

‫ﺱ"!م‬P‫ و‬System.IO Name Spaces ‫"!ام‬#$ iK"#‫ ا‬3"; : FileStream -4


‹-* B* ‫اءة‬+,‫‹ أو ا‬-* <‫( إ‬$"%- ‫اء‬1# ‫ت‬T-/‫ ا‬I* D*."‫ ا‬gh g##‫ ا‬D%'$
B;w‫ "ﺡ‬Buffer ‫ة‬+‫ﺱ"!م ذاآ‬P ¬‫ ﺡ‬Backing Storage Class ‫س‬o%‫‰ ا‬7‫ ه‬+&".P‫و‬
‫ر‬1*2‫ ا‬B*‫اءة و‬+,‫( أو ا‬$"%‫( ا‬-/K B* ‫ء‬i"s‫ ا‬B‫ة ﺡ‬+‫اآ‬7‫ ا‬gh 9a* D%'$ ‫ا&ت‬
: g-; /‫ﺱ"!م آ‬P‫ﻩ و‬-K ($"%‫ﻩ أو ا‬:* ‫اءة‬+,‫اد ا‬+/‫‹ ا‬-/‫ﺡ; *ﺱر ا‬P ih (*i‫ا‬

35
C#
FileStream FS = new FileStream(@"C:\MyStream.txt",
FileMode.CreateNew);// Any Action For Example CreateNew to Create Folder

VB.NET:
Dim FS As FileStream = New FileStream("C:\MyStream.txt",
FileMode.CreateNew)

: FileMode ‫ ال‬I* ("‫ ا‬Enumeration ‫"!ام ال‬#‫ ا‬::%/;

o‫د اﺹ‬1H1/‫‹ ا‬-/‫( ﺹ * إ< ا‬hks Append -1


‫د‬1H1* ‹-/‫ ﺡ< إذا آن ا‬gh overwriting D/.$ ‫م‬1,;‫; و‬H ‹-* ‫'ء‬s Create -2
¨&‫ *ﺱ‬D%'$
‹-/‫د ا‬1H‫ ﺡ( و‬gh Exception gO.; ‫ اﻩ‬e‫ إ‬Create ‫ ال‬gh /‫ آ‬1‫ وه‬CreateNew -3
¨&‫ *ﺱ‬D%'$
‫ﺡد‬/‫‹ ا‬-/‫د ا‬1H‫م و‬K (‫ ﺡ‬gh Excption gO.; ¬‫‹ * ﺡ‬-* ‫اءة‬+, Open -4
‫م‬1,; ‰‫د‬1H‫م و‬K (‫ ﺡ‬gh‫ﻩ و‬P‫اء‬+,$ ‫م‬1,; ‹-/‫ ا‬H‫ ﺡ( إذا و‬gh OpenOrCreate -5
.‫'ﻩ‬ $
d‫ر‬h ‫ﻩ‬-.H‫‹ و‬-/‫;ت ا‬1"‫ف *ﺡ‬7‫ و;ﺱ"!م ﺡ‬Truncate -6

: Stream Members : k


g‫ وه‬Stream ‫"&ت ال‬%* i$ ‫ك‬+"'P g"‫دس ا‬1t/‫ و ا‬1‫اﺹ‬1!‫ ا‬B* (K1/)* C:‫ه‬
: g-; /‫آ‬

D&,; ‫ﺱ"!م‬/‫ ا‬Stream ‫( إذا آن ال‬h+./ ‫ﺱ"!م‬P‫ و‬CanWrite ‫ و‬CanRead -1


gh False ‫ و‬D&,; ‫ ﺡ( إذا آن‬gh True (/9 IH+P ¬‫ ﺡ‬e ‫( أم‬$"%‫اءة أو ا‬+,‫( ا‬-/K
‫ﺡﺹ *ى‬T ($"%‫اءة أو ا‬+,‫( ا‬-/K ‫اء‬+H‫ إ‬D&9 ‫دة‬K ‫ و;ﺱ"!م‬D&,; e ‫ﺡ( أﻩ‬
.. (‫ﺡو‬/‫ ا‬D&9 (‫ﺡ‬oS‫ا‬
Current Stream ‫ ال‬I91* ;‫دة "ﺡ‬K Seeking ‫ ﺡ¬ ;ﺱ"!م ال‬CanSeek -2
‫ ال‬Dt* (-/.‫‰ ا‬7‫ ه‬Backing Storage ‫ﺱ"!م‬P g"‫ت ا‬#o%‫ ا‬3KP ‫دة‬.‫وا‬

36
Stream ‫ ﺡ( إذا آن ال‬gh false (/9 IH+P‫ و‬True (/9 IH+P ‫ه‬:K‫ و‬FileStream
. Backing Storage <-K ‫ي‬1"‫ ;ﺡ‬e Class
‫ﺹ( ال‬j <-K ‫ي‬1"‫ ;ﺡ‬stream ‫ ﺡ( إذا آن ال‬gh True (/9 IH+P‫ و‬CanTimeout -3
. (-/.- ‫ *ﺡد‬9‫ و‬gO.P g"‫ وا‬Timeout
(h+./ i:* ‫دة‬T"#e‫ ا‬B%/;‫ و‬Byte ‫ل‬$ Stream ‫ ال‬3)‫( ﺡ‬h+./ ‫ﺱ"!م‬P‫ و‬Length -4
. Stream ‫ ال‬3)‫< ﺡ‬-K ‫ء‬:$ (h1TS/‫ ا‬3)‫ أو "ﺡ; ﺡ‬Stream ‫;( ال‬i
Stream ‫ ل‬I91/‫ﺡ; ا‬P ‫( أو‬h+./ Set ‫ و‬Get ‫ﺱ"!م ال‬P‫ و‬Position -5
: g-; /‫ آ‬g‫دس وه‬1t/‫ ا‬B* (K1/)/$ Stream ‫"&ت ال‬%* ‫ك‬+"'P‫و‬

: Synchronous Methods *‫ا‬2


‫دس ا‬.3
‫ ا‬-1

Buffer ‫ ال‬gh ‫ﻩ‬:;w!P‫ و‬Stream Data ‫اءة‬+, ‫ﺱ"!م‬P‫ و‬ReadByte ‫ و‬Read .I


ReadByte ‫"!ام ال‬#$ iP‫اء‬+9 3"# g"‫د ا&;"ت ا‬K ;‫ﺡ‬P B%/;‫و‬
Read ‫ ال‬IH+P ¬‫ ﺡ‬Stream ‫;( ال‬i (h+.* ioj B* IO"‫ ﺱ‬/‫آ‬
.Stream ‫ء ال‬i"‫ ﺡ( ا‬gh 1- (/9 ReadByte ‫ وال‬0 (/9
B%/;‫ و‬Stream ‫ ال‬+&K ‫ل‬#‫ر‬s‫( ا‬-/. ‫ﺱ"!م‬P‫ و‬WriteByte ‫ وال‬Write .II
‫"!ام ال‬#$ ‫ة‬+* D‫ آ‬gh i"$"‫ آ‬3"# g"‫د ا&;"ت ا‬K ;‫ﺡ‬P
.WriteByte

: Asynchronous Methods *‫ا‬2


‫ ا‬y ‫دس‬.3
‫ ا‬-2

($"%‫اءة أو ا‬+,‫( ا‬-/. ‫ﺱ"!م‬P‫ و‬BeginWrite ‫ وال‬BeginRead .I


gh /‫ات آ‬+"*‫رو‬$ (‫ﺱ‬/j 7jGP‫ و‬B*‫ا‬w"/‫ ا‬+‫ ا‬Stream ‫"!ام ال‬#$
: g"‫ ا‬D%'‫ا‬

‫ﻩ‬-K ($"%‫ﻩ أو ا‬:* ‫اءة‬+,‫( ا‬-/. ‫ﺱ"!م‬P ‫ف‬1# g"‫ وا‬Byte Buffer ‫ال‬ -1
($"%‫اءة أو ا‬+,‫ ا‬I91* ‫ﻩ‬h ‫ف ;ﺡد‬1# ‫ي‬7‫ وا‬offset ‫ال‬ -2
3"# g"‫ ا&;"ت ا‬B* <S92‫ﺡ; اﺡ ا‬P ‫ﻩ‬h 3"; ‫ف‬1# ‫ي‬7‫ وا‬numByte ‫ال‬ -3
iP‫اء‬+9 ‫ أو‬i"$"‫آ‬
‫ء‬i"e‫ ا‬:K ‫ﻩ‬K"#‫ ا‬3"; ¬‫ ﺡ‬Optional Delegate 1‫ وه‬AsyncCallback ‫ال‬ -4
($"%‫اءة أو ا‬+,‫( ا‬-/K B*
Read & ‫ ال‬w/" ‫ﺱ"!م‬P‫ و‬User Provided Object g‫ وه‬Stateobject ‫ال‬ -5
. Requests ‫‰ ال‬+d BK Write Request
Stream ‫ ﺡ( ال‬Dt/; ‫ي‬7‫ وا‬IAsyncResult ‫ ال‬Begin Methods ‫ ال‬IH+P
. Operation

Stream ‫ ال‬7T:P ‫ ﺡ( إذا أرد‬gh ‫ﺱ"!م‬P‫ و‬EndWrite ‫ وال‬EndRead .II
‫"^ر‬$ <,&; ¬‫ ﺡ‬،g‫ اﺡ‬Stream Operation ‫ ال‬B* ‫ء‬i"e‫ ا‬.$ Operation
($1-O/‫( ا‬-/.‫ ا‬7T:; 3u (,$‫( اﺱ‬-/.‫ء ا‬i"‫ا‬

: ‫ وه‬Stream ‫د وا 'ﺩم دارة ال‬.3


‫وهك ﻉ| ا‬

3"; ¬‫ﺡدة ﺡ‬/‫( ا‬-/.‫م ا‬/P‫ إ‬.$ Buffer ‫;ت ال‬1"‫ *ﺡ‬Ì;+T" ‫ﺱ"!م‬P‫ و‬Flush -1
.Stream Object gh ‰;‫ﺡ‬P 3P ‫ي‬7‫ ا‬Destination ‫ إ< ال‬Buffer ‫;ت ال‬1"‫ *ﺡ‬D,

‫ ال‬D&9 B* ‫زة‬1)‫ﺡ‬/‫ ا‬Resources ‫ ال‬+;+‫ﺡ‬P‫ و‬Stream ‫ق ال‬ods ‫ﺱ"!م‬P‫ و‬Close -2


‫ أن‬B* ‫آ‬G"‫ و‬Finally block ‫ء ا!ص ب‬w)‫ ا‬gh i*‫"!ا‬#$ S:;‫ و‬Stream Object
‫ء‬:u‫ إ‬Exception ‫ ﺡ( ﺡوث أي‬gh ‫ارد‬1/‫( ا‬h‫ آ‬+;+‫ﺡ‬P‫ﻩ و‬9od‫ إ‬3"# Stream ‫ال‬
.—*+&‫ق ا‬od‫ إ‬.$ ‫ة‬+‫اآ‬7‫ ا‬gh ‫ارد‬1/‫‰ ا‬7‫ء ه‬,$ ‫م‬K ‫ن‬/‚‫ و‬7T:"‫ا‬

37
B‫آ‬e ‫&ﻩ‬,"#‫ﻩ أو ا‬#‫; إر‬+ ‫ي‬7‫ وا‬Stream ‫ ال‬3)‫ﺱ"!م "ﺡ; ﺡ‬P‫ و‬SetLength -3
<‫ إ‬C‫دي ذا‬a; ‫ف‬1# SetLength ‫ ال‬gh ‫ﺡد‬/‫ ا‬B* D9‫ أ‬Stream ‫ ﺡ( إذا آن ال‬gh
e‫‰ ا!ﺹ( إ‬7‫"!ام ه‬#‫ ا‬IO"‫ﺱ‬P B ، 3-# D%'$ ‫ﻩ‬1‫م وﺹ‬K‫ و‬Stream ‫ع ال‬O,‫ا‬
S:; ‫ا‬7 CanSeek ‫ و‬CanWrite (‫ل ا!ﺹ‬oj B* C7 (‫ﺡ‬oS‫ ا‬C-/P C‫آت ا‬GP ‫إذا‬
. Stream ‫ ال‬3)‫ﺡ; ﺡ‬P D&9 e‫ﺡ( أو‬oS‫ﺡﺹ ا‬T$

:Stream Manipulation : 3k

3"; ‫دة‬.‫ ا‬gh‫ و‬Text ‫ أو‬Binary Data D,: Stream ‫"&ت ال‬%* ‫"!ام‬#‫ ا‬B%/;
3";‫ و‬Binary Data ‫ ال‬I* D*." BinaryWriter ‫ و ال‬BinaryReader ‫"!ام ال‬#‫ا‬
، Text ‫ ال‬I* D*." StreamWriter ‫ وال‬StreamReader ‫"!ام ال‬#‫ا‬
<‫ إ‬Stream B* D;1‫ "ﺡ‬UnicodeEncoding ‫ أو‬ASCIIEncoding ‫"!ام ال‬#‫ ا‬3";‫و‬
B* (K1/)* ‫ﺱ"!م‬P ¬‫ل ﺡ‬#‫ر‬s‫ ا‬:K Stream <‫ إ‬Text B*‫&ل و‬,"#e‫ ا‬:K Text
: g"‫ ا‬D%'‫ ا‬gh /‫ آ‬g‫دس وه‬1t/‫ا‬

String ‫ أو‬Character Array 7jGP ¬‫ ﺡ‬Overloaded Method g‫ وه‬GetByteCount -1


.. B.* ‫ ﺹ‬D,: iH"‫ف ﺡ‬1# g"‫د ا&;"ت ا‬K IH+P‫و‬
‫"!ام ال‬#$ i#‫ إر‬IO"‫ ﺡ"< ﺱ‬Byte Array <‫ إ‬String ‫ ال‬D;1‫ "ﺡ‬GetBytes -2
. Stream
‫ ال‬gh ‫ن‬1%P ‫ف‬1# g"‫ف ا‬+‫ﺡ‬2‫د ا‬K IH+P‫ و‬Byte Array 7jGP ¬‫ ﺡ‬GetCharCount -3
. Character Array ‫ ال‬gh ‫ أو‬String
‫&ل‬,"#‫ ا‬:K ‫ﺱ"!م‬P‫ و‬String <‫ إ‬Byte Array B* D;1‫ﺱ"!م "ﺡ‬P‫ و‬GetChars -4
. ‫ى‬+j‫ة أ‬+* ‫ إ< ﺹ‬i1‫ ﺡ¬ ﺡ‬Stream ‫ ال‬B* ‫ا&ت‬

v‫ ;  أو‬Text o  StreamWriter ‫ و ال‬StreamReader ‫ *< ال‬o*‫وﻉ‬


:; 
‫" و'ﺩم آ‬p \ System.IO ‫ *] ال‬C€#‫ﺩ‬p‫ا‬

:‹-* B* ‫اءة‬+,- StreamReader


C#
StreamReader str = File.OpenText(openFileDialog1.FileName);
textBox1.Text = str.ReadToEnd();

VB.NET:
Dim str As StreamReader = File.OpenText(openFileDialog1.FileName)
textBox1.Text = str.ReadToEnd

38
:‹-* <‫( إ‬$"%- StreamWriter
C#
string fname = saveFileDialog1.FileName;
StreamWriter fsave = new StreamWriter(fname);
fsave.WriteLine(textBox1.Text);

VB.NET:
Dim fname As String = saveFileDialog1.FileName
Dim fsave As StreamWriter = New StreamWriter(fname)
fsave.WriteLine(textBox1.Text)

\; Binary Data o  BinaryWriter ‫ وال‬BinaryReader ‫ *< ال‬o*‫و ﻉ‬


:; 
‫" و'ﺩم آ‬p \ System.IO ‫ *] ال‬C€#‫ﺩ‬p‫ا‬

:Stream ‫ ال‬B* Binary Data ‫اءة‬+, BinaryReader


C#
NetworkStream myns = new NetworkStream(mysocket);
BinaryReader br = new BinaryReader(myns);
:Socket ‫ ال‬+&K Stream ‫ إ< ال‬BinaryData ‫ل‬#‫ر‬s BinaryWriterr

TcpClient myclient = new TcpClient("localhost", 5020);


NetworkStream myns = myclient.GetStream();
BinaryWriter mysw = new BinaryWriter(myns);
mysw.Write(arrImage);

VB.NET:
Dim myns As NetworkStream = New NetworkStream(mysocket)
Dim br As BinaryReader = New BinaryReader(myns)
Dim myclient As TcpClient = New TcpClient("localhost", 5020)
Dim myns As NetworkStream = myclient.GetStream
Dim mysw As BinaryWriter = New BinaryWriter(myns)
mysw.Write(arrImage)

:Stream Reader & Writer ‫ﺩام ال‬p Remote Control Example

]‫آ‬v Chatting ‫ف ﺩم ﻩ *„ ƒ"ﻩ ب‬.p ‫ل '?"  ﻁ‬3*
‫ل‬p‫
 ‡ر‬1 ‫ض إذا‬0; 4> Server ‫ ال‬5‫?ء أوا* إ‬# ‫ف ﺩ*ﻩ‬.p
‹3* 
1 ‫ ﻩ وإذا‬notepad ‫ﺡ ال‬0 ‫م‬. ; ‫ &ن‬server ‫ ال‬5‫ إ‬notepad 
‫آ‬
: ‫" ﻩ وه ا‬p‫ﺡ اŒ اﺡ‬0; ‫ف‬.p Server‫ ال‬5‫ إ‬Cp‫ وإر‬Calc 

Client ‫*— ال‬+$ BK ‫ل‬#‫ر‬s‫*— ا‬+$ ‹-"!; e : Client ‫ل‬#‫ر‬s‫*— ا‬+$ ‫ إ'ء‬: e‫أو‬
TCP Connection B* D‫ﻩ آ‬h ‫ و;ﺱ"!م‬Chapter1 ‫ ال‬gh ‫'ﻩ‬ $ :/9 ‫ي‬7‫ ا‬Chat
‫د‬1t/‫"!ام ا‬#&h ‫ل‬#‫ر‬s‫( ا‬-/K ‫اء‬+Hs StreamWriter ‫ و ال‬NetworkStream ‫وال‬
‫ب‬1"%/‫ﺹ ا‬:‫ ا‬D;1‫ﺡ‬P (-/K 3"P StreamWriter Object ‫ ال‬B/k ‫دة‬1H1/‫ ا‬WriteLine
‫"!ام ال‬#$ i#‫ إر‬3" Bytes ‫ ال‬B* (K1/)* <‫ إ‬Textbox ‫ ال‬gh
39 ‫&ء‬-‫ و‬Server‫*— ال‬+$ <‫ إ‬TCP Socket Connection ‫ ال‬+&K NetworkStream
: g"‫ ا‬D%'‫ ا‬gh /‫; آ‬H ‫وع‬+'* ‫'ء‬ $

39
: ("‫ ا‬Name Spaces (hk $ 39 3u
C#
using System.Net.Sockets ;
using System.IO;
:g"‫د ا‬1%‫( ا‬$"%$ 39 Send Button gh
try
{
TcpClient myclient = new TcpClient (txt_host.Text,5020); // ‫;‹ ال‬+.PSocket
NetworkStream myns = myclient.GetStream (); // %)$‫ او‬3;+"‫ﺱ‬-‫د‰ إ< ا‬:#‫إ‬
StreamWriter mysw = new StreamWriter (myns);
mysw.WriteLine(txt_msg.Text);

mysw.Close ();
myns.Close ();
myclient.Close ();
}
catch (Exception ex) {MessageBox.Show (ex.Message );}

VB.NET:
imports System.Net.Sockets ;
imports System.IO;

Try
Dim myclient As TcpClient = New TcpClient(txt_host.Text, 5020)
Dim myns As NetworkStream = myclient.GetStream
Dim mysw As StreamWriter = New StreamWriter(myns)
mysw.WriteLine(txt_msg.Text)
mysw.Close
myns.Close
myclient.Close
Catch ex As Exception
Msgbox(ex.Message)
End Try

Text <‫ﻩ إ‬-;1‫ﺡ‬P‫ و‬Stream ‫&ل ال‬,"#‫< ا‬-K D/.; ‫ي‬7‫ وا‬Server ‫*— ال‬+$ ‫'ء‬s‫و‬
: g"‫ ا‬D%'‫ ا‬gh /‫; آ‬H ‫وع‬+'* ‫'ء‬ $ 39 .. ‫ى‬+j‫ة أ‬+*

40
: ("‫ ا‬Name Spaces (hk $ 39
C#
using System.Net.Sockets ;
using System.IO;
using System.Threading;
: ("‫ر;‹ ا‬."‫( ا‬hk‫ إ‬3u
TcpListener mytcpl;// Objects Declaration
Socket mysocket;
NetworkStream myns;
StreamReader mysr;
: g-; /‫;ة آ‬H ‫د‬1t* ‫'ء‬ $ ‫م‬1, 3u
void our_Server ()
{
mytcpl = new TcpListener (5020);// Open The Port
mytcpl.Start ();// Start Listening on That Port
mysocket = mytcpl.AcceptSocket ();// Accept Any Request From Client and
Start a Session
myns = new NetworkStream (mysocket);// Receives The Binary Data From
Port
mysr = new StreamReader (myns);// Convert Received Data to String
string order = mysr.ReadLine();

// you can add any order and Response Here


if (order=="notepad") System.Diagnostics.Process.Start("notepad");
else if (order=="calc") System.Diagnostics.Process.Start("calc");
else MessageBox.Show("Sorry Sir Your Request is not in my hand",order);

mytcpl.Stop();// Close TCP Session

if (mysocket.Connected ==true)// Looping While Connected to Receive


Another Message
{
while (true)
{
our_Server ();// Back to First Method
}
}
}
VB.NET:
Private mytcpl As TcpListener
Private mysocket As Socket
Private myns As NetworkStream
Private mysr As StreamReader

41
Sub our_Server()
mytcpl = New TcpListener(5020)
mytcpl.Start()
mysocket = mytcpl.AcceptSocket
myns = New NetworkStream(mysocket)
mysr = New StreamReader(myns)
Dim order As String = mysr.ReadLine
If order = "notepad" Then
System.Diagnostics.Process.Start("notepad")
Else
If order = "calc" Then
System.Diagnostics.Process.Start("calc")
Else
Msgbox("Sorry Sir Your Request is not in my hand", order)
End If
End If
mytcpl.Stop()
If mysocket.Connected = True Then
While True
our_Server()
End While
End If
End Sub

‫م‬1,; Request ‫ ﺡ( ورود أي‬gh Socket ‫< ال‬-K :S"$ ‫د‬1t/‫‰ ا‬7‫م ه‬1,P ¬‫ﺡ‬
Socket‫ ال‬+&K ‫ت‬$ ‫ ﺡ( ورود أي‬gh‫ﻩ و‬.* ‫;ة‬H Session ‫ﻩ وإ'ء‬-K (,h‫ا‬1/$
(#+‫ﺡﺹ ا‬T$ ‫م‬1, 3u Text <‫ إ‬i1‫ و;ﺡ‬StreamReader ‫"!ام ال‬#$ i/-‫;"ﺱ‬
iK"#‫ ا‬3"; notepad g‫( ه‬#+‫ إذا آ ا‬ot/h (m+'‫ ا‬D/)‫"!ام ا‬#$
Name gh ‫دة‬1H1/‫ وا‬Process ‫س‬o%‫ ا‬B/k ‫دة‬1H1/‫ ا‬Start ‫د‬1t/‫"!ام ا‬#$
...System.Diagnostics Spaces
D'"‫أ ا‬$ ‫ ﺡث‬gh Thread ‫;‹ ال‬+.P Ik‫ و‬B* $e ;H Thread B/k i-'"‫و‬
: g-; /‫ آ‬FormD
C#
private void Form1_Load(object sender, System.EventArgs e)
{
Thread myth;
myth= new Thread (new System.Threading .ThreadStart(our_Server));
myth.Start ();
}

‫ وال‬Socket‫ق ال‬od‫ إ‬B* ‫آ‬G" C‫ وذ‬Form Closing ‫ ﺡث ال‬gh g"‫( ا‬hk $ 39 3u
.. —*+&‫ ا‬gh Stream
private void Form1_Closing(object sender,
System.ComponentModel.CancelEventArgs e)
{
try
{
mytcpl.Stop ();
Application.ExitThread ();
Application.Exit();

42
}
catch (Exception ex) {MessageBox .Show (ex.Message );}

VB.NET:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As


System.EventArgs)
Dim myth As Thread
myth = New Thread(New System.Threading.ThreadStart(our_Server))
myth.Start()
End Sub

Private Sub Form1_Closing(ByVal sender As Object, ByVal e As


System.ComponentModel.CancelEventArgs)
Try
mytcpl.Stop()
Application.ExitThread()
Application.Exit()
Catch ex As Exception
Msgbox(ex.Message)
End Try
End Sub

43
Dot Net Networks & TCP/IP Programming

Chapter 3
The Socket & Network Layer Programming

The Socket & Network Layer Programming

A. Socket Programming
B. Socket Class Members
C. TCP & UDP Classes Members
D. Asynchronous Sockets

44
\>‫\ ا[ ا>
] ا‬

: Socket & Network Layer Programming :3.1

Network Layer ‫( ال‬,&m ()*+$ BK oSTP +t‫ أآ‬D%'$ B& ‫ف‬1# ‫ء‬w)‫ا ا‬7‫ ه‬gh
Stream <‫ و إ‬B* i-;1‫ﺡ‬P .$ ‫&ل ا&ت‬,"#‫ل وا‬#‫ر‬s i.* D*."‫ ا‬3"; g"‫ ا‬g‫وه‬
‫ق‬+T‫ ا‬:$‫&ل و‬,"#o‫ل و‬#‫ر‬Á UDP ‫ و‬TCP ‫"!ام ال‬#$ ,$# :/9 ،(%&'‫ ا‬+&K
TCP & UDP ‫ وال‬Socket Programming ‫ ال‬BK ‫ف "ﺡث‬1# ‫ء‬w)‫ا ا‬7‫ ه‬gh‫ و‬/i:$
. Asynchronous Socket BK ‫ف "ﺡث‬1# (;i:‫ ا‬gh‫ و‬Classes

Socket Programming :v‫أو‬

<‫ز إ‬iH B* ioj B* ‫ ا&ت‬D, 3"; g"‫داة ا‬2‫ ا‬g‫ ه‬Socket‫وف أن ال‬+./‫ ا‬B*
¬‫ ﺡ‬Name Space System.Net.Sockets ‹;+.P (;‫ ا&ا‬gh ‫م‬w-; i*‫"!ا‬#e‫ و‬+j‫أ‬
gh i*‫"!ا‬#‫ ا‬3"; g"‫ وا‬Classes ‫ ال‬B* 3!k ‫د‬K <-K Name Space ‫ا‬7‫ي ه‬1"‫;ﺡ‬
I* D*."‫ ا‬B/$ ::%/; ‫ إذ‬Socket Class 1‫ وه‬/‫ أه‬BK ‫ف "ﺡث‬1#‫( و‬%&'‫*)ت ا‬+$
Socket ‫ن ال‬1%";‫ و‬+V&* D%'$ ‫ت‬e1‫آ‬1P+&‫ ا‬B* +j‫ع أ‬1 ‫ أي‬I* ‫ أو‬UDP ‫ أو ال‬TCP ‫ال‬
:g-; /‫ات آ‬+"*‫رو‬$ (uou B* Object Method
C #:
Socket MySocket = new Socket(AddressFamily. , SocketType., ProtocolType.);

VB.NET:
Dim MySocket As Socket = New Socket(AddressFamily, SocketType,
ProtocolType)

‫ﻩ‬.* D*."P ‫ف‬1# ‫ي‬7‫ وا‬IP Address ‫( ال‬K1 ;‫ﺡ‬P ‫ول‬2‫ ا‬+"*‫ ا&رو‬gh 3"; ¬‫ﺡ‬
ATM ‫ أو‬Novel ‫ت ال‬%&V gh ‫ﺱ"!م‬/‫ وا‬IPX i:*‫ ا!رات و‬B* +&‫د آ‬K CO.;‫و‬
B*‫ و‬... ‫ه‬+d‫ و‬NetBIOS Address ‫ أو‬ATM Networks ‫ت ال‬%&V gh ‫ﺱ"!م‬/‫وا‬
‫*)ت‬+&‫ ا‬I* 3‫ دا‬D%'$ ‫ * ﺱ"!*ﻩ‬1‫ وه‬InterNetwork‫‰ ا!رات ال‬7‫ ه‬3‫أه‬
‫ ^م‬I* ‫"د‬./‫ ا‬1‫ وه‬IPv4 ‫ع‬1:‫ ا‬B* 1‫ ه‬IP ‫ع‬1 ‫< أن‬-K ‫ف‬+.;‫ت و‬%&'$ (‫ا!ﺹ‬
3"# ‫ا‬H †;+,‫ ا‬D&,"‫ﺱ‬/‫ ا‬gh‫( ﺡ و‬h‫و‬+./‫ ا‬D'"‫( ا‬/^‫† أ‬-d‫ وأ‬h1#‫و‬+%;*
Socket ‫ع ال‬1 ;‫ﺡ‬P 3"; gt‫ ا‬+"*‫ ا&رو‬gh ،IPv6 ‫ﻩ ال‬-‫ *ﺡ‬D‫ﻩ وﺡ‬:K ‫ء‬:"#s‫ا‬
‫"!ام‬#‫ ا‬3"; * ‫دة‬K‫ و‬+j‫ء ا‬gV ‫ل ا&ت أو‬#‫ر‬s Stream ‫ف ﺱ"!م‬1# D‫أي ه‬
‫ا‬+j‫ وأ‬، Stream ‫ع‬1:‫ ا‬B* D#‫ا‬+"‫( ا‬O/ /".:# :‫( ﺡ¬ ا‬/i/‫‰ ا‬7i Stream ‫ال‬
‫ت‬e1‫آ‬1P‫و‬+$ ‫ أو‬TCP ‫ أو‬UDP ‫ع‬1:‫ ا‬B* 1‫ ه‬Dih ‫ل‬SPÁ ‫ﺱ"!م‬/‫ل ا‬1‫آ‬1P‫و‬+&‫ع ا‬1 ‫ﺡد‬
Internet Group IGMP ‫ أو‬Internet Control Message Protocol ICMPDt* ‫ى‬+j‫أ‬
IP Security Header ‹;+." Socket ‫ إ'ء ال‬ot* ;+ :‫ أو ا‬Management Protocol
‫ر‬1*2‫‰ ا‬7‫ ه‬Dt* ‫ح‬+V <-K gPG ‫ف‬1#‫ه و‬+d‫ و‬IPSecAuthenticationHeader ‫"ر‬j $
TCP ‫ل ال‬1‫آ‬1P+$ ‫وف أن‬+./‫ ا‬B*‫ و‬UDP ‫ أو‬TCP ‫ف !"ر ال‬1# :‫ وه‬،Î‫ إ'ء ا‬,‫ﺡ‬e
* ‫!ﺹ‬V <‫ إ‬D‫ﺹ‬1"‫ل وا‬1‫ﺹ‬1‫ ا‬B* ¨,‫( ا"ﺡ‬-/K ‫اء‬+H‫ إ‬g:.; ‫ا‬7‫ﻩ وه‬H1* ‫ل‬1‫آ‬1P+$ 1‫ه‬
B* ¨,‫( ا"ﺡ‬-/K 3K; e ‫ﻩ‬:‫آ‬e ‫ ﺱ& و‬I;+# ‫ل‬1‫آ‬1P+$ 1ih UDP ‫ل ال‬1‫آ‬1P+$ *‫*ﺡد أ‬
gK‫ذا‬s‫( ا&¬ ا‬-/K ‫اء‬+Hs ‫ا‬H T* 1‫( وه‬-#+/‫&ت ا‬- 3-‫ل اﺱ‬1‫ﺹ‬1‫ا‬
‫ول‬2‫ء ا‬w)‫ ا‬gh ‰:‫ﺡ‬+V * 1‫ وه‬Multicast Group ¬&‫ت ا‬K1/)* ‫ وإ'ء‬Broadcast
Header ‫ وال‬TCP ‫ل‬$ ‫ ا!ص‬Header ‫ﻩ ال‬h B&;‫ و‬g"‫ ا‬D%'‫ إ< ا‬+^‫ أ‬gt‫وا‬
:/i:$ ‫ق‬+T‫ﺡ¶ ا‬e‫ و‬UDP ‫ل‬$ ‫ا!ص‬

‫ان‬1:K B;w!P ‫ﻩ‬h 3"; ¬‫اﺡ ﺡ‬1‫ ا‬%&- 32 Bits B* ‫ن‬1%";‫ و‬TCP Header ‫ ال‬e‫أو‬
32 Bits gh %&- g-‫ﺱ‬-‫ ا"ﺱ‬39+‫ وا‬16 Bits gh D&,"‫ﺱ‬/‫ وا‬16 Bits gh D#+/‫ا‬
‫&ت‬$ ‫ء ا!ص‬w)‫ ا‬Ik‫ و‬3"; (;i:‫ ا‬gh‫ و‬Checksum ‫( إ< ال‬hks$ ¨,‫ ا"ﺡ‬39‫ور‬
:

45
TCP Header

Data Offset: 4 bits the number of 32 bit words in the TCP Header. This indicates
where the data begins. The TCP header (even one including options) is an integral
number of 32 bits long.
Window: The number of data octets beginning with the one indicated in the
acknowledgment field which the sender of this segment is willing to accept.

<-K ‫ي‬1"‫اﺡ و;ﺡ‬1‫ ا‬%&- ‫ ا&ت‬B* 32 Bits B* ‫ن‬1%";‫ و‬UDP Header ‫ ال‬u
gk‫ا‬+"h‫ ا‬D%'$‫"ر;ن و‬j‫ ا‬/ih Checksum ‫ و ال‬3-"‫ﺱ‬/‫ أ* ا‬16 Bits D#+/‫ان ا‬1:K
:‫ل‬#‫ر‬s‫( ا‬-/K gh 3i*‫"!ا‬#‫ ا‬3"; e

UDP Header

The Checksum in UDP Header. 16 bits.


Computed as the 16-bit one's complement of the one's complement sum of a pseudo
header of information from the IP header, the UDP header, and the data, padded as
needed with zero bytes at the end to make a multiple of two bytes. If the checksum
is cleared to zero, then checksuming is disabled. If the computed checksum is zero,
then this field must be set to 0xFFFF.

46
: TCP Connection ‫'ء‬s Socket Programming ‫"!ام ال‬#‫ا‬
D‫اﺡ‬+/‫ ا‬B* (K1/)/$ TCP Socket Connection ‫"!ام ال‬#$ ‫ل‬SPe‫( ا‬-/K +/P
: g"‫ ا‬D%'‫ ا‬gh /‫ آ‬g‫وه‬

: g-; /‫ آ‬Socket ‫'ء ال‬ $ server ‫ و ال‬Client ‫ ال‬gh (-/.‫&أ ا‬P ‫إذ‬
C #:
Socket MySocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);

VB.NET:
Dim MySocket As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
:K >,h ‫ﺱ"!م‬P‫ و‬Bind ‫د‬1t/‫"!ام ا‬#$ g‫ اﺡ‬+P1&/%‫ ا‬I* Socket ‫> ال‬$‫ ر‬3u
: g-; /‫&ل وآ‬,"#e‫ا‬
C #:
IPEndPoint ip = new IPEndPoint(IPAddress.Any, 5020);
MySocket.Bind(ip);

VB.NET:
Dim ip As IPEndPoint = New IPEndPoint(IPAddress.Any, 5020)
MySocket.Bind(ip)
‫ﺡد‬P C:%/;‫ و‬listen ‫د‬1t/‫"!ام ا‬#$ ‫ﺡد‬/‫ ا‬Port‫< ال‬-K :S"‫( ا‬-/.$ ‫م‬,‫ ا‬3u
‫م‬1, 3u 1- 39+‫ر ﻩ ا‬+/ ‫ *ﺡد‬+d ‫د‬K Ik1‫ و‬i1&9 3"# g"‫ة ا‬wiH2‫د ا‬K
: g-; /‫ وآ‬accept ‫د‬1t/‫"!ام ا‬#$ ‫ل‬SPe‫< ا‬-K (,h‫ا‬1/$
C #:
MySocket.Listen(-1);
MySocket.Accept();

VB.NET:
MySocket.Listen(-1)
MySocket.Accept

47
B* (h1TS* gh ‫ ا&ت‬Ð&.P ¬‫ ﺡ‬Receive ‫د‬1t/‫ل ا‬oj B* ‫&ل ا&ت‬,"#‫ ا‬3";‫و‬
: g-; /‫ وآ‬Byte ‫ع‬1:‫ا‬
C #:
byte[]Received=new byte[1024];
MySocket.Receive(Received);

VB.NET:
Dim Received(1024) As Byte
MySocket.Receive(Received)

(‫ل‬t/‫ آ‬5020)Port‫< ال‬-K iT;+."$‫ و‬TCP ‫ع‬1:‫ ا‬B* Connection ‫'ء‬ $ :/9 :‫وه‬
gi e Listen ‹;+."$ :/9‫ و‬Bind ‫د‬1t/‫"!ام ا‬#$ Socket ‫ل‬$ iO$‫ ر‬3"; ¬‫ﺡ‬
.. 1- ‫د‬.‫ا‬

Socket‫;‹ ال‬+.P B* $e Socket ‫"!ام ال‬#$ TCP Client ‫ل‬#‫ر‬s‫*— ا‬+$ ‹;+."‫و‬
‫ل‬#‫ إر‬3u IPEndPoint ‫ف‬i‫( ا‬O,:$ Port‫ ال‬39‫ ور‬Server‫ان ال‬1:K ‫د‬:#‫ى وإ‬+j‫ة أ‬+*
socket ‫ ال‬gh ‫ﻩ‬T;+.P 3P /$ ‫ل‬#‫ر‬s‫( ا‬-/K 3"P‫ و‬Send ‫د‬1t/‫"!ام ا‬#$ ‫ا&ت‬
: g-; /‫ وآ‬Stream Socket ‫ﺱ"!م‬:# ¬‫ﺡ‬
C #:
String str = Console.ReadLine();
ASCIIEncoding asen = new ASCIIEncoding();
byte[] msg = asen.GetBytes(str);

Socket MySocket = new Socket(AddressFamily.InterNetwork,


SocketType.Stream, ProtocolType.Tcp);
IPEndPoint remote = new IPEndPoint(IPAddress.Parse("192.168.1.101"),
5020);
MySocket.Connect(remote);
MySocket.Send(msg);
MySocket.Close();

VB.NET:
Dim str As String = Console.ReadLine
Dim asen As ASCIIEncoding = New ASCIIEncoding
Dim msg As Byte() = asen.GetBytes(str)
Dim MySocket As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
Dim remote As IPEndPoint = New
IPEndPoint(IPAddress.Parse("192.168.1.101"), 5020)
MySocket.Connect(remote)
MySocket.Send(msg)
MySocket.Close

48
: UDP Connectionless ‫'ء‬s Socket Programming ‫"!ام ال‬#‫ا‬
D‫اﺡ‬+/‫ ا‬B* (K1/)/$ UDP Socket Connection ‫"!ام ال‬#$ ‫ل‬SPe‫( ا‬-/K +/P
: g"‫ ا‬D%'‫ ا‬gh /‫ آ‬g‫وه‬

server ‫ و ال‬Client ‫ ال‬gh (-/.‫&أ ا‬P ‫ إذ‬TCP ‫ ال‬gh /‫ل آ‬SPe‫( ا‬-/K ‫ﻩ‬$'"P‫و‬
: g-; /‫ آ‬Socket ‫'ء ال‬ $
C #:
Socket MySocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Udp);

VB.NET:
Dim MySocket As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Udp)

:K >,h ‫ﺱ"!م‬P‫ و‬Bind ‫د‬1t/‫"!ام ا‬#$ g‫ اﺡ‬+P1&/%‫ ا‬I* Socket ‫> ال‬$‫ ر‬3u
: g-; /‫&ل وآ‬,"#e‫ا‬
C #:
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 5020);
MySocket.Bind(sender);

VB.NET:
Dim sender As IPEndPoint = New IPEndPoint(IPAddress.Any, 5020)
MySocket.Bind(sender)

End Point (;‫ ا&ا‬gh ‫ف‬+. ¬‫ ﺡ‬ReceiveFrom ‫د‬1t/‫&ل ا&ت ﺱ"!م ا‬,"#e‫و‬
‫( ال‬h1TS* I* reference ‫ر‰ ك‬+/‫( و‬,$‫ اﺱ‬gh ‫ﻩ‬T;+.P 3P * <-K ‫ء‬:$ Reference
B* String <‫( إ‬h1TS/‫ ا‬D;1‫ﺡ‬P IO"‫ ﺱ‬3u B*‫ و‬ReceiveFrom ‫د‬1t/‫ إ< ا‬Byte
: g-; /‫ وآ‬ASCII ‫س‬o%‫ ا‬B/k ‫دة‬1H1/‫ ا‬GetString ‫د‬1t/‫ل ا‬oj
C #:
int recv;
byte[] data = new byte[1024];
EndPoint Remote = (EndPoint) (sender);
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

VB.NET:
Dim recv As Integer
Dim data(1024) As Byte

49
Dim Remote As EndPoint = CType((sender), EndPoint)
recv = newsock.ReceiveFrom(data, Remote)
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv))

B* i-;1‫ﺡ‬P .$ ‫ ا&ت‬i ‫ر‬+/ ¬‫ ﺡ‬SendTo ‫د‬1t/‫"!ام ا‬#‫ل ا‬#‫ر‬s‫ ا‬gh 3";‫و‬
‫د‬1t/‫ل ا‬oj B* ‫"ﻩ‬h+.* ::%/; ‫( إذ‬-#+/‫ ا&ت ا‬3)‫ وﺡ‬Byte Array <‫ إ‬String
‫ر ﻩ ال‬+/ ‫ا‬+j‫( وا‬-#+/‫( ا‬#+ Broadcast D/K ;+ ¬‫ ﺡ‬Flags ‫ع ال‬1‫ و‬Length
:g-; /‫ وآ‬EndPoint Object
C #:
string welcome = "Hello All";
data = Encoding.ASCII.GetBytes(welcome);
newsock.SendTo(data, data.Length, SocketFlags.Broadcast, Remote);

VB.NET:
Dim welcome As String = "Hello All"
data = Encoding.ASCII.GetBytes(welcome)
newsock.SendTo(data, data.Length, SocketFlags.Broadcast, Remote)

‫ﺡ;ه‬P B%/; ‫ أو‬gi":P e ¬‫ﺡ‬$ Infinity While Loop gh ‫اد‬1‫آ‬2‫ا ا‬7‫ ه‬Ik‫ و‬B%/;
.. ‫&ل‬,"#e‫ل وا‬#‫ر‬s‫ت ا‬-/K B* B.* ‫د‬.$

: Socket Classes Members :k

‫د‰ إ< ال‬:#‫ إ‬B%/; ¬‫ ﺡ‬IP Address ‹;+." ‫ و;ﺱ"!م‬: IPAddress Class -1
:g-; /‫*( ﻩ آ‬.‫( ا‬S‫ل وا‬t/‫ آ‬IPEndPoint
C #:
IPAddress newaddress = IPAddress.Parse("192.168.1.1");

VB.NET:
Dim newaddress As IPAddress = IPAddress.Parse("192.168.1.1")

: g-; /‫ آ‬g‫ان وه‬1:.‫ﺡ; ا‬P gh ‫رات‬j (.$‫ ار‬B$ ‫"ر‬js‫ ا‬B%/;‫و‬
(%&'‫< ا‬-K ‫ان *"ح‬1:K ‫ أي‬Dt/" ‫ و;ﺱ"!م‬Any
(%&'‫< ا‬-K ‫ة‬wiH2‫ ا‬I/) gK‫ذا‬s‫ ا&¬ ا‬Dt/" ‫ و;ﺱ"!م‬Broadcast
127.0.0.1 1‫ وه‬loopback D ‫وف‬+./‫ان ا‬1:.‫ ا‬Dt/" ‫ و;ﺱ"!م‬Loopback
‫^م‬:‫ ا‬gh Network Interfase ‫د‬1H‫م و‬K (‫ ﺡ‬gh ‫ و;ﺱ"!م‬None

: i/‫د وأه‬1t/‫ ا‬B* (K1/)* 3K; /‫آ‬

:‫ وه‬tow Objects B$ (‫ر‬,/- ‫م‬K D%'$ ‫د‬1t/‫ا ا‬7‫ ;ﺱ"!م ه‬Equals
‫ إذا آ‬False ‫ و‬Bi$'"* ‫ إذا آ‬True IH+;‫ و‬B‫ا‬1:K B$ (‫ر‬,/- ‫ﺱ"!م‬#
.BT-"!*

Hash Code (‫ان إ< ﺹ‬1:.‫ع ا‬H‫ر‬s ‫ﺱ"!م‬P‫ و‬GetHashCode

‫ان‬1:.‫ ا‬B* Network ‫ل‬$ ‫ء ا!ص‬w)‫ ا‬IH+;‫ و‬HostToNetworkOrder

‫ان‬1:.‫ ا‬B* Host ‫ل‬$ ‫ء ا!ص‬w)‫ ا‬IH+;‫ و‬NetworkToHostOrder

50
Host D Port ‫ان وال‬1:.‫‰ "ﺡ; ا‬:*!"#‫ ﺡ¬ ا‬: IPEndPoint Class -2
: g-; /‫*( ﻩ آ‬.‫( ا‬S‫ﻩ وا‬$ ‫ل‬SPe‫; ا‬+ ‫ي‬7‫وا‬

C #:

IPEndPoint end = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 5020);

VB.NET:
Dim end As IPEndPoint = New IPEndPoint(IPAddress.Parse("192.168.1.1"),
5020)

:g-; /‫ آ‬g‫ وه‬Socket Class ‫ ال‬gh 3KP g"‫اص ا‬1!‫( ا‬K1/)*
Socket ‫< ال‬-K (h+./‫ ا‬B;‫و‬:.‫( ا‬K1/)* IH+;‫ و‬AddressFamily
Socket ‫ ال‬B* ‫اءة‬+,- ‫ة‬w‫ ا&ت ا)ه‬3)‫ ﺡ‬IH+;‫ و‬Available
e ‫ أم‬Blocking Mode ‫ ;ﺱ"!م ال‬socket ‫( إذا آن ال‬h+./ Set ‫ أو‬Get gO.;‫ و‬Blocking
Remote ‫ ال‬I* DS"* Socket ‫( إذا آن ال‬h+./ ‫ة‬+t%$ (‫‰ ا!ﺹ‬7‫ﺱ"!م ه‬P‫ و‬Connected
e ‫ أم‬Host
Socket ‫ ال‬I* D*."; ‫ي‬7‫ ا‬D'"‫( ^م ا‬h+./ ‫ و;ﺱ"!م‬Handle
Socket ‫ ال‬gh ‫ي ;ﺱ"!م‬7‫ل ا‬1‫آ‬1P‫و‬+&‫( ا‬h+./ ‫ و;ﺱ"!م‬ProtocolType
Remote Host ‫ ال‬I* ‫ي ;ﺱ"!م‬7‫ ا‬Socket ‫ ال‬BK ‫*ت‬1-.* IH+;‫ و‬RemoteEndPoint

:C'*‫ﺩا‬pv ‫ل‬3
‫وآ‬
C #:
using System;
using System.Net;
using System.Net.Sockets;
class Socket_ Properties
{
public static void Main()
{
IPAddress ia = IPAddress.Parse("127.0.0.1");
IPEndPoint ie = new IPEndPoint(ia, 8000);
Socket fmo = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
Console.WriteLine("AddressFamily: {0}",
fmo.AddressFamily);
Console.WriteLine("SocketType: {0}",
fmo.SocketType);
Console.WriteLine("ProtocolType: {0}",
fmo.ProtocolType);
Console.WriteLine("Blocking: {0}", fmo.Blocking);
fmo.Blocking = false;
Console.WriteLine("new Blocking: {0}", fmo.Blocking);
Console.WriteLine("Connected: {0}", fmo.Connected);
fmo.Bind(ie);
IPEndPoint iep = (IPEndPoint)fmo.LocalEndPoint;
Console.WriteLine("Local EndPoint: {0}",
iep.ToString());

51
fmo.Close();
}

VB.NET:
imports System
imports System.Net
imports System.Net.Sockets

Public Shared Sub Main()


Dim ia As IPAddress = IPAddress.Parse("127.0.0.1")
Dim ie As IPEndPoint = New IPEndPoint(ia, 8000)
Dim fmo As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
Console.WriteLine("AddressFamily: {0}", fmo.AddressFamily)
Console.WriteLine("SocketType: {0}", fmo.SocketType)
Console.WriteLine("ProtocolType: {0}", fmo.ProtocolType)
Console.WriteLine("Blocking: {0}", fmo.Blocking)
fmo.Blocking = False
Console.WriteLine("new Blocking: {0}", fmo.Blocking)
Console.WriteLine("Connected: {0}", fmo.Connected)
fmo.Bind(ie)
Dim iep As IPEndPoint = CType(fmo.LocalEndPoint, IPEndPoint)
Console.WriteLine("Local EndPoint: {0}", iep.ToString)
fmo.Close()

End Sub

:‫*ت ا‬.‫’< ا
ﻉ‬p 4>

AddressFamily: InterNetwork
SocketType: Stream
ProtocolType: Tcp
Blocking: True
new Blocking: False
Connected: False
Local EndPoint: 127.0.0.1:8000
Press any key to continue . . .

52
: TCP & UDP Classes Members :3k

: TCP Connection Oriented Protocol ‫ل‬$ (‫ ا!ﺹ‬Classes ‫ ال‬e‫أو‬

Properties ‫ وال‬Methods ‫ ال‬B* (K1/)* <-K ‫ي‬1"‫ﺡ‬P ¬‫ ﺡ‬:TcpClient Class-1


:g-; /‫ آ‬g‫وه‬

: TCPClient Methods i$ (‫د ا!ﺹ‬1t/‫ ا‬3‫ أه‬:e‫أو‬

IP ‫ان ال‬1:K ih ‫ر‬+/ ¬‫ ﺡ‬server ‫ ال‬I* ‫ل‬SPe‫( ا‬-/K ‫اء‬+H2 ‫ﺱ"!م‬P‫ و‬:Connect
:g-; /‫ وآ‬Port‫ ال‬39‫ و ر‬Server ‫ل‬$ ‫ا!ص‬
C #:
TcpClient tcp = new TcpClient();
tcp.Connect(IPAddress.Parse("192.168.1.1"),5020);

VB.NET:
Dim tcp As TcpClient = New TcpClient
tcp.Connect(IPAddress.Parse("192.168.1.1"), 5020)

.TCP Socket ‫ ال‬I* ‫ل‬SPe‫ء ا‬is :Close


.Asynchronies Result IH+P ¬‫ ﺡ‬Asynchronies Connection ‫ء‬is :EndConnect
‫ل و‬#‫ر‬s‫( ا‬-/K gh Socket ‫ ال‬B* Stream ‫اءة ال‬+, ‫ و;ﺱ"!م‬:GetStream
.‫&ل‬,"#e‫ا‬

: TCPClient Properties ‫ﺹ‬S!‫ ا‬3‫ أه‬:u

Linger Time ‫( ال‬h+.* ‫ "ﺡ; أو‬Set ‫ أو‬get 7jGP‫ و‬: LingerState


e ‫ أم‬+jG" B.* 9‫ك و‬:‫( إذا آن ه‬h+.* ‫ "ﺡ; أو‬Set ‫ أو‬get 7jGP‫ و‬:NoDelay
/‫ ;ﺱ‬Socket‫( ال‬h+.* ‫ "ﺡ; أو‬Set ‫ أو‬get 7jGP‫ و‬:ExclusiveAddressUse
.e ‫ أم‬Client Port ‫"!ام ال‬#$
3)‫( ﺡ‬h+.* ‫ "ﺡ; أو‬Set ‫ أو‬get 7jGP‫ و‬:ReceiveBufferSize ‫ و‬SendBufferSize
.TCP Client Object gh ‫ف‬+./‫ وا‬stream ‫ ال‬gh ‫ﺱ"!م‬/‫ ا‬Buffer ‫ال‬
91‫( ا‬h+.* ‫ "ﺡ; أو‬Set ‫ أو‬get 7jGP‫ و‬:ReceiveTimeout ‫ و‬SendTimeout
); 3 ‫ ﺡ( أﻩ‬gh Time Out gO.; ¬‫&ل ﺡ‬,"#s‫ل أو ا‬#‫ر‬s‫( ا‬-/. ‫"ح‬/‫ا‬
.(:.* (:*‫ة ز‬+"h ‫ل‬oj +j2‫ف ا‬+O‫ا‬

53
Properties ‫ وال‬Methods ‫ ال‬B* (K1/)* <-K ‫ي‬1"‫ﺡ‬P ¬‫ ﺡ‬:TcpListener Class-2
:g-; /‫ آ‬g‫وه‬

: TcpListener Methods i$ (‫د ا!ﺹ‬1t/‫ ا‬3‫ أه‬:e‫أو‬

.Client ‫ ال‬I* ‫ل‬SPe‫( ا‬-/K ‫ل‬1&, ‫ﺱ"!م‬P‫ و‬:AcceptSocket


‫د‬K ;‫ﺡ‬P 3"; i‫ إ‬39‫ ر‬+;+/P (‫ ﺡ‬gh ‫ ﺡ¬ اﻩ‬Overloaded Method g‫ وه‬: Start
S; B.* 39‫ﺡ; ر‬P ‫ون‬$‫ و‬Qouee ‫ر أو ال‬1$O‫ ا‬gh ‫ده‬1H1$ /‫ﺱ‬P g"‫ة ا‬wiH2‫ا‬
.‫ *ﺡد‬+d Qouee ‫ال‬
‫"!ام‬#‫ ا‬:K Finally ‫ ال‬gh i.k‫ و‬D‚T;‫ و‬:S"‫( ا‬-/K ‫ق‬ods ‫ﺱ"!م‬P‫ و‬: Stop
.Exception ‫ ﺡ( ﺡوث أي‬gh :S"‫( ا‬-/K ‫ء‬i‫ إ‬3"; <"‫ ﺡ‬Catch ‫ و ال‬Try ‫ال‬

:TcpListener gh ‫ﺹ‬S!‫ ا‬3‫ أه‬:u

LocalEndpoint ‫ ال‬gh ‫ﺱ"!م‬/‫ ا‬Port‫ ال‬39‫ ور‬IP ‫ ال‬IH+; ¬‫ ﺡ‬: LocalEndpoint
.‫ﺡد‬/‫ا‬
TCP Server ‫ ال‬gh ‫د‬1t/‫ﺹ و ا‬S!‫ ا‬D‫ل إ< آ‬1‫ﺹ‬1‫ ا‬IO"‫ ﺱ‬ioj B*‫ و‬:Server
‫ه‬+d‫ و‬Listen ‫ و‬Receive ‫ وال‬Sendto ‫ وال‬Accept ‫ ال‬Dt* ,$# ‫ه‬:‫ﺡ‬+V g"‫وا‬

: UDP Connectionless Protocol ‫ل‬$ (‫ ا!ﺹ‬Classes ‫ ال‬u

:/9 UDP Datagram Protocol Connection ‹;+." ‫ﺱ"!م‬P‫ و‬:UdpClient Class-1


: g-; /‫ آ‬g‫ وه‬iP;1"‫ *ﺡ‬3‫ أه‬B&:# ‫ء‬w)‫ا ا‬7‫ ه‬gh‫ و‬i.* D*."‫ وا‬iT;+."$ ,$#

54
: i$ (‫ﺹ ا!ﺹ‬S!‫د وا‬1t/‫ ا‬3‫ أه‬B*‫و‬

(K1/)* ‫ان أو‬1:K ‫ أو إء‬3‚ :DropMulticastGroup ‫ و‬JoinMulticastGroup


.Multicast Group ‫ ال‬B* B;‫و‬:.‫ ا‬B*
.socket ‫ ال‬gh Broadcasting ‫ ال‬D.T" Set ‫ أو‬Get 7jGP‫ و‬:EnableBroadcast
.Mlticast Loopback ‫ﺡ; ال‬P ‫( أو‬h+./ Set ‫ أو‬Get 7jGP‫ و‬:MulticastLoopback

IP B;w!P 3"; ¬‫ ﺡ‬Multicasting ‫ ال‬gh ‫ و;ﺱ"!م‬:MulticastOption Class-2


Multicast ‫ي‬2 Drop ‫ و‬Join D/. Multicast Group gh i.* D*." Address List
: Multicast D#‫&ل ر‬,"#e (;1‚K (hks ‫ل‬t/‫ آ‬g-; /‫ﺱ"!م آ‬P‫ و‬Group

: g-; /‫ وآ‬UDP Socket ‫ف ال‬+. v‫أو‬


C #:
mcastSocket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,
ProtocolType.Udp);

VB.NET:
mcastSocket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp)

Group ‫ ال‬gh ‫ﻩ‬j‫; إد‬+ ‫ي‬7‫ ا‬IP ‫ ال‬i‫ إ‬:‫ ﺱ‬3u Address List ‹;+."$ ‫م‬1, k
/‫ وآ‬Bind ‫د‬1t/‫"!ام ا‬#$ ‫ت‬1%‫ﺱ‬$ iO$+ ‫ﺱﻩ‬T:$ ‫ان‬1:.‫ ا‬Dj; User ‫ ال‬D.) ‫أو‬
: g-;
C #:
IPAddress localIPAddr = IPAddress.Parse(Console.ReadLine());
mcastSocket.Bind(IPlocal);

VB.NET:
Dim localIPAddr As IPAddress = IPAddress.Parse(Console.ReadLine)
mcastSocket.Bind(IPlocal)

55
:g-; /‫ﺡد آ‬/‫ان ا‬1:.‫ ا‬i :‫ وﺱ‬Multicast Option ‫;‹ ال‬+."$ ‫م‬1, 3k
C #:
MulticastOption mcastOption;
mcastOption = new MulticastOption(localIPAddr);

VB.NET:
Dim mcastOption As MulticastOption
mcastOption = New MulticastOption(localIPAddr)

;‫ول "ﺡ‬2‫ات ا‬+"*‫رو‬$ (uou ‫د‬1t/‫‰ ا‬7‫ ه‬7jGP ¬‫< ال ﺡ‬-K +"‫ ‚‹ ا‬3u B*‫و‬
‰7‫ ه‬:"‫ ﺡ‬gh‫ و‬UDP ‫ أو‬TCP ‫ أو‬Socket <-K ‫ أو‬IPv6 <-K ‫ أو‬IP <-K +"‫ى ا‬1"‫*ﺱ‬
gh‫ و‬Multicast Group <‫ إ‬IP 3k 1‫;‰ ه‬+ * ‫ إذ‬IP <-K +"‫ف ﺱ"!م ا‬1#
(hk‫ إ‬B$ ‫"ر‬je‫ ا‬B%/;‫;( و‬1‚K (hk‫; إ‬+ ¬‫ ﺡ‬+"‫ع ا‬1 ‫ ﺡد‬gt‫ ا‬+"*‫ا&رو‬
‫ إﻩ ال‬:‫ا ﺱ‬+j‫ وأ‬DropMembership (;1‚K ‫ أو إء‬AddMembership ‫;ﻩ‬1‚K
:g-; /‫'ﻩ و آ‬ $ :/9 ‫ي‬7‫ وا‬MulticastOption Object
C#:
mcastSocket.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership,mcastOption);

VB.NET:
mcastSocket.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership, mcastOption)

56
: Asynchronous Sockets Programming :3.2

+t‫ أآ‬D%'$ Asynchronous Socket ‫"!ام ال‬#‫ ا‬BK ‫ء‬w)‫ا ا‬7‫ ه‬gh ‫ف "ﺡث‬1#
‫"!ام‬#‫< ا‬-K (-/.‫( ا‬-t*2‫ ا‬B* (K1/)* ¨&O ‫ف‬1#‫ و‬,$# ‫ﻩ‬$ :u‫ﺡ‬P /K oSTP
... ‫ت‬%&'‫*)ت ا‬+$ gh B*‫ا‬w"* +‫ل ا‬SPe‫ا‬
gh D/.‫ﺡ"ج إ< ا‬P g"‫*)ت ا‬+&‫ ا‬gh ‫ا‬H 3i* B*‫ا‬w"/‫ل ا‬SPe‫وف أن ا‬+./‫ ا‬B*
(-/.‫ء ا‬i"‫ ا‬.$ <‫ إ‬+jÀ +*2 ‫ل‬SPe‫"!ام ا‬#$ /‫ ;ﺱ‬e ¬‫ ﺡ‬g,,‫ اﺡ‬B*w‫ا‬
S:; e B‫ آ‬e ‫ر‬1*2‫‰ ا‬7‫ ه‬Dt* †-O"P g"‫ت ا‬-/.‫ ا‬gh ‫ا‬H 3i* ‫"!ا*ﻩ‬#‫ا)ر;( وا‬
Slow ‫ﺱ"!م‬P ‫&ت‬- (-&,"‫ﺱ‬/‫( ا‬i)‫ ﺡ( إذا آ ا‬gh ‫"!ا*ﻩ‬#‫ا ا‬$‫أ‬
‫ أو‬D&,"‫ﺱ‬/‫ ا‬I* D#+/‫ ا‬B;‫ز‬i)‫> ا‬$+ Dialup ‫< ال‬-K (%&'‫د ا‬/"K‫ آ‬Connection
¬‫ ﺡ‬Server‫ﺱ"!م ال‬P B*!"‫ﺱ‬/‫ ا‬B* ‫ة‬+&‫( آ‬K1/)* C:‫ ﺡ( إذا آن ه‬gh
gh ‫ل‬#‫ر‬s‫( ا‬-/K ‫اء‬+H‫ إ‬B* (%&'‫< ا‬-K B*!"‫ﺱ‬/‫( ا‬,$ B*‫ا‬w"/‫ب ا‬1-#2‫ ا‬I:/;
‫"!ام‬#$ S:; (‫‰ اﺡ‬7‫ ه‬gh‫ و‬، +jÀ ‫ز‬iH B* ‫ت‬$ D&,"‫ ;ﺱ‬Server ‫ن ال‬1‫ﺡ( آ‬
‫ة‬.$ ‫م‬,‫*— ا‬+&‫ ا‬B* ‫ ﺡ( إذا أرد‬gh ‫ا‬H 3i* +&".; ‫ إذ‬B*‫ا‬w"/‫ ا‬+‫ل ا‬SPe‫ا‬
,$# +‫ ذآ‬/‫ أو آ‬، Connection ‫ﺱ ال‬T ‫"!ام‬#$‫ و‬Thread ‫ﺱ ال‬T <-K‫م و‬i*
‫ﺱ‬T ‫ن‬1*!"‫ ;ﺱ‬B*!"‫د *ﺱ‬K H1; ‫ء ﺱ& أو اﻩ‬gO$ ‫ل‬SPe‫ ﺡ( إذا آن ا‬gh
.. Server ‫ال‬

: Asynchronous Socket Class and its members v‫أو‬

‫ ال‬B/k ‫دة‬1H1/‫ ا‬methods ‫ ال‬B* (K1/)/$ B*‫ا‬w"/‫ ا‬+d ‫ل‬SPe‫ اوت  ا‬3KP
9‫ و‬System.Net.Socket Namespaces ‫ ال‬B* iK"#‫ ا‬3"; g"‫ وا‬Socket Class
Begin D%‫ و‬،‫د‬1t/‫ ا‬3#‫ا;( أ‬$ gh Begin ‫د ال‬1H1$ ‫دس‬1t/‫‰ ا‬7‫ت اوت  ه‬w*
:K callback result ‫ع‬H‫ر‬s ‫ﺱ"!م‬P g"‫ وا‬i (-$,* End Method H1; Method
:g-; /‫ آ‬g‫ وه‬7T:"‫ ا‬B* Begin Method ‫ء ال‬i"‫ا‬

57
Object ‫د‰ إ< ال‬:#‫ وإ‬Client Request ‫ل ال‬1&, ‫ﺱ"!م‬P ‫ و‬BeginAccept -1
‫د‬K ‫&ل‬,"#‫ ا‬B* Server ‫ ال‬B%/"; ‫ف‬1# (,;+O‫‰ ا‬7‫"!ام ه‬#$‫ و‬AsyncCallback
(-/.‫ ا‬B* ‫ء‬i"e‫"^ر ا‬e (H‫ون اﺡ‬$‫ و‬91‫ﺱ ا‬T gh Clients Requests ‫ ال‬B*
AsyncCallback Delegate ‫"!ام ال‬#$ ‫د‬1t/‫ء ا‬K"#‫ة ا‬+* D‫ آ‬gh 3"; ¬‫ا)ر;( ﺡ‬
:g-; /‫ آ‬g-; /‫ﺱ"!م آ‬P‫و‬
C #:
m_mainSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint (IPAddress.Any, 5020);

m_mainSocket.Bind (ipLocal);
m_mainSocket.Listen (10);
m_mainSocket.BeginAccept (new AsyncCallback (Client_request_method),
null);

VB.NET:
m_mainSocket = New Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
Dim ipLocal As IPEndPoint = New IPEndPoint(IPAddress.Any, 5020)
m_mainSocket.Bind(ipLocal)
m_mainSocket.Listen(10)
m_mainSocket.BeginAccept(New AsyncCallback(Client_request_method),
Nothing)

¨$‫ اﺱ‬BK DST:* Callback Reference gh Client Request ‫( ال‬hk‫ إ‬3"# ¬‫ﺡ‬
Client Accepted ‫ء ال‬i‫ وإ‬Client Request ‫&ل ال‬,"#e method ‫ إ'ء‬B* $e :‫وه‬
: EndAccept ‫د‬1t/‫"!ام ا‬#$ Object
C#:
public void Client_request_method(IAsyncResult ar)
{
Socket listener = (Socket)ar.AsyncState;
Myclient = listener.EndAccept(ar);
Myclient.Send(/* data to be send*/ );
listener.BeginAccept(new AsyncCallback(Client_request_method), listener);
Console.WriteLine("Socket connected to {0}",
client.RemoteEndPoint.ToString()); }

VB.NET:
Dim listener As Socket = CType(ar.AsyncState, Socket)
Myclient = listener.EndAccept(ar)
Myclient.Send
listener.BeginAccept(New AsyncCallback(Client_request_method), listener)
Console.WriteLine("Socket connected to {0}",
client.RemoteEndPoint.ToString)

:g-; /‫ل آ‬%V‫ة أ‬K 7jGP BeginAccept Method‫ أﺹ&ﺡ ال‬Dot Net 2005 gh

State ‫ و‬AsyncCallBack Delegate 7jGP‫ و‬2005 ‫ و‬2003  ‫ اوت‬gh ‫ول‬2‫ ا‬D%'‫ا‬
:g-; /‫ وآ‬Socket ‫ ال‬gh Request ‫ ﺡ( ال‬BK ‫*ت‬1-.* ‫ع‬H‫ر‬s Object
MySocket.BeginAccept(AsyncCallback , object state)

58
(/-"‫ﺱ‬/‫ ا&ت ا‬3)‫ﺡ; ﺡ‬P ‫ﻩ‬h C:%/; ¬‫ ﺡ‬2005  ‫ اوت‬gh gt‫ ا‬D%'‫ا‬
MySocket.BeginAccept(int Data_ Receive_Size , AsyncCallback , object state)

Accepted Socket ‫ﺡ; ال‬P ‫ﻩ‬h B%/$ ¬‫ ﺡ‬2005  ‫ اوت‬gh ¬t‫ ا‬D%'‫ا‬
MySocket.BeginAccept(Socket accept_Socket ,int Data_ Receive_Size ,
AsyncCallback , object state)

Socket ‫< ال‬-K Asynchronous Connection ‫ﺱ"!م &أ‬P‫ و‬BeginConnect -2


‫ وال‬Asynchronous Callback ‫ وال‬IPEndPoint ‫ ال‬i :‫ﺡد ﺡ¬ ;ﺱ‬/‫ ا‬Port‫ ال‬39‫ور‬
:g-; /‫ وآ‬State Object
MySocket.BeginConnect(EndPoint IP,Syncallback Result,object state)

:‫ل‬t/‫ آ‬g-; /‫ﺱ"!م آ‬P‫و‬


C #:
Socket MySocket = new Socket (AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipend = new IPEndPoint(IPAddress.Parse("192.168.1.101"),
5020);

MySocket.BeginConnect(ipend, new AsyncCallback(Connected), MySocket);

VB.NET:
Dim MySocket As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
Dim ipend As IPEndPoint = New
IPEndPoint(IPAddress.Parse("192.168.1.101"), 5020)

:g-; /‫ آ‬CallBack Socket ‫ﺡ; ال‬P 3"; Connected Method ‫ ال‬gh
C #:
public static void Connected(IAsyncResult iar)
{
Socket sock = (Socket)iar.AsyncState;
try
{
sock.EndConnect(iar);
}
catch (SocketException)
{
Console.WriteLine("Unable to connect to host");
}}

VB.NET:
Public Shared Sub Connected(ByVal iar As IAsyncResult)
Dim sock As Socket = CType(iar.AsyncState, Socket)
Try
sock.EndConnect(iar)
Catch generatedExceptionVariable0 As SocketException
Console.WriteLine("Unable to connect to host")
End Try

59
End Sub

Byte gh i:;w!P‫ و‬Client ‫ ال‬B* ‫ت‬$ ‫&ل‬,"#s ‫ﺱ"!م‬P‫ و‬BeginReceive -3


:g-; /‫ آ‬i (*.‫( ا‬S‫ وا‬Array

MySocket.BeginReceive(Byte[] buffer,int offset, SocketFlags,AsyncCallback,


object sate)

:‫ل‬t/‫ آ‬g-; /‫و;ﺱ"!م آ‬


C #:
byte[] data = new byte[1024];
MySocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new
AsyncCallback(ReceivedData), MySocket);

void ReceivedData(IAsyncResult iar)


{
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceive(iar);
string receivedData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine(receivedData);
}

VB.NET:
Dim data(1024) As Byte
MySocket.BeginReceive(data, 0, data.Length, SocketFlags.None, New
AsyncCallback(ReceivedData), MySocket)

Sub ReceivedData(ByVal iar As IAsyncResult)


Dim remote As Socket = CType(iar.AsyncState, Socket)
Dim recv As Integer = remote.EndReceive(iar)
Dim receivedData As String = Encoding.ASCII.GetString(data, 0, recv)
Console.WriteLine(receivedData)
End Sub

‫"!ام‬#$ ‫ *ﺡد‬I91* B* ‫&ل ا&ت‬,"#s BeginReceiveFrom ‫د‬1t/‫ﺱ"!م ا‬P /‫آ‬


. IPEndPoint Refrance Object ¨$‫آ† اﺱ‬+"‫ ﺡ¬ ;‚ف إ< ا‬UDP ‫ال‬

‫ ال‬+&K D&,"‫ﺱ‬/‫ف ا‬+O‫ت إ< ا‬$ ‫ل‬#‫ر‬s ‫ﺱ"!م‬P‫ و‬BeginSend -4


:g-; /‫ آ‬i (*.‫( ا‬S‫ وا‬Asynchronous Socket

MySocket.BeginSend (Byte[] buffer,int offset, SocketFlags,AsyncCallback,


object sate)

:‫ل‬t/‫ آ‬g-; /‫ﺱ"!م آ‬P‫و‬


C #:
private static void SendData(IAsyncResult iar)
{
Socket server = (Socket)iar.AsyncState;
int sent = server.EndSend(iar);
}

60
byte[] data = Encoding.ASCII.GetBytes("Hello Word");
MySocket.BeginSend(data, 0, data.Length, SocketFlags.None,
new AsyncCallback(SendData), MySocket);

VB.NET:
Private Shared Sub SendData(ByVal iar As IAsyncResult)
Dim server As Socket = CType(iar.AsyncState, Socket)
Dim sent As Integer = server.EndSend(iar)
End Sub
Dim data As Byte() = Encoding.ASCII.GetBytes("Hello Word")
MySocket.BeginSend(data, 0, data.Length, SocketFlags.None, AddressOf
SendData, MySocket)

‫ *ﺡد‬Remote Host <‫ل ا&ت إ‬#‫ر‬s BeginSendto ‫د‬1t/‫ﺱ"!م ا‬P /‫آ‬


. IPEndPoint Refrance Object ¨$‫آ† اﺱ‬+"‫ ﺡ¬ ;‚ف إ< ا‬UDP ‫"!ام ال‬#$

:‫ وه‬2005 – ‫د ا ﺩ;ﺩة  اﺩوت‬.3


‫ *] ا‬#.
* 7‫ آ
 '\ إ‬-5
‫‹ و ال‬-* ‫ل‬#‫ر‬s BeginSendFile ‫ل و‬SPe‫ء ا‬is BegonDiconnect
‫ ا&ت‬B* ‫د *ﺡد‬K ‫&ل‬,"#s ‫ﺱ"!م‬P g"‫ وا‬BeginReceiveMessageFrom
.. Bufer ‫ ال‬gh ‫ن *ﺡد‬%* gh i:;w!P‫و‬

:g"‫آ† ا‬+"‫ ا‬BeginSendFile‫ ال‬7jGP


MySocket.BeginSendFile(string filename,AsyncCallback Asyn,object state)

:g"‫آ† ا‬+"‫ ا‬BeginReceiveMessageFrom ‫وال‬


MySocket.BeginReceiveMessageFrom(byte Buffer ,int offset,int
size,SocketFlags sf,ref EndPoint,AsyncCallback ascb,object state)

:g"‫آ† ا‬+"‫ ا‬BegonDiconnect ‫وال‬


MySocket.BeginDisconnect(bool reuseSocket,AsyncCallback ascb,object state)

: – ‫  اﺩوت‬Asynchronous Socket ‫ '?" ت ال‬:k

Socket Object‫'ء ال‬ $ ‫&أ‬P D‫اﺡ‬+/‫ ا‬B* (K1/)/$ B*‫ا‬w"* +‫ل ا‬SPe‫( ا‬-/K +/P
Asynchronous ‫ &أ‬BeginConnect ‫;‹ ال‬+.P 3"; C‫ ذ‬.$ Server Side ‫ ال‬gh
Method‫ وال‬IPEndPoint Object ‫د‬:#‫ إ‬3"; ¬‫ ﺡ‬Socket ‫< ال‬-K Connection
‫ل‬SPe‫( ا‬-/K (‫‰ اﺡ‬7‫ ه‬gh ‫&أ‬P‫ و‬i State Object ‫ وال‬Asynchronous Callback
3"; ¬‫ ﺡ‬Client Request ‫ل ال‬1&, BeginAccept ‫ر إ< ال‬+/P C‫ ذ‬.$‫ و‬، Socket ‫ل‬$
(‫ﺱ‬-)‫ل ا‬1&,$ ih ‫ﻩ‬/-. Client ‫ إ< ال‬Acknowledgement D#+;‫† و‬-O‫ل ا‬1&9
‫ل‬#‫ر‬s$ ‫ﺱ( ا&ء‬-)‫< ا‬-K (,h‫ا‬1/‫ ا‬.$ Client ‫ ال‬IO"‫ل و ;ﺱ‬#‫ر‬Á ‫( ا&ء‬%*‫وإ‬
‫"!ام‬#$ Client ‫ ال‬B* (#+‫ ا‬Server ‫ ال‬D&,"‫ و;ﺱ‬BeginSend ‫د‬1t/‫"!ام ا‬#$
End ‫د‬1t/‫ ا‬i-$,P Begin (-/K D% ‫ن‬ h ,$# +‫ ذآ‬/‫ وآ‬BeginReceive ‫د‬1t/‫ا‬
‫ل‬SPe‫ ا‬w* * 1‫*— وه‬+&‫ ا‬gh Thread ‫ﺱ ال‬T <-K ‫ى‬+j‫( أ‬-/K ‫اء‬+Hs ‫اد‬."#o
.B*‫ا‬w"/‫ل ا‬SPe‫ ا‬BK B*‫ا‬w"* +‫ا‬

61
Client/Server Chatting —*+$ ‫'ء‬ $ ‫ن‬º‫م ا‬1, ‫ف‬1# (,$‫ اﺱ‬3‫ه‬T/‫< ا‬-K ‫ء‬:$‫و‬
. ‫&ل ا&ت‬,"#‫ل وا‬#‫ر‬s Asynchronous Socket ‫< ال‬-K /".;

:g"‫ ا‬D%'‫ ا‬gh /‫; آ‬H ‫وع‬+'* ‫'ء‬ $ 39 ‫&ء‬-‫و‬

:‫ ا‬Namespaces ‫ف ﺩم ال‬.p


C #:
using System.Net;
using System.Net.Sockets;
using System.Text;

VB.NET:
Imports System.Net
Imports System.Net.Sockets
Imports System.Text

62
7‡ \1(Main Class ‫ ال‬%;‫ )أي ﻉﺩ 'ﻉ‬Global Declaration ‫ ال‬
:‫ ا‬%;‫اﻉر‬
C #:
public class Form1 : System.Windows.Forms.Form
{
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,
ProtocolType.Tcp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 5020);
private byte[] data = new byte[1024];
private int size = 1024;

VB.NET:
Public Class Form1 Inherits System.Windows.Forms.Form

Private server As Socket = New Socket(AddressFamily.InterNetwork,


SocketType.Stream, ProtocolType.Tcp)
Private iep As IPEndPoint = New IPEndPoint(IPAddress.Any, 5020)
Private data As Byte() = New Byte(1024) {}
Private size As Integer = 1024

Connection ‫ﻉف‬p 4> ‫د ا‬.‫ ا‬7‡ \1 Form Load ‫ ال‬
‫ل‬/'v‫ل ا‬."1 
# %;‫\ 'ﻉ‬k 5020 Port‫ ال‬5# o
‫ و;ﻉ‬TCP ‫ ال‬5# ‫;ﻉ
ﺩ‬
: BeginAccept ‫ﺩام ال‬p
C #:
private void Form1_Load(object sender, System.EventArgs e)
{
server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,
ProtocolType.Tcp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 5020);
server.Bind(iep);
server.Listen(5);
server.BeginAccept(new AsyncCallback(AcceptConn), server);
}

VB.NET:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As
System.EventArgs)
server = New Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Any, 5020)
server.Bind(iep)
server.Listen(5)
server.BeginAccept(New AsyncCallback(AcceptConn), server)
End Sub

Accepted ‫ء ال‬C‫\ ﻩ إ‬p ‫ وا ي‬Accept Callback Method ‫\ إ=ء‬k
‫ل‬p‫ وﻉﺩ ذš إر‬EndAccept Method ‫ﺩام ال‬p Request
op'‫ل ا? و‬."  C ›"' Client ‫ ال‬5‫ إ‬Acknowledgement
:; 
‫ آ‬BeginSend Method ‫ﺩام ال‬p

63
C #:
void AcceptConn(IAsyncResult iar)
{
Socket oldserver = (Socket)iar.AsyncState;
Socket client = oldserver.EndAccept(iar);
conStatus.Text = "Connected to: " + client.RemoteEndPoint.ToString();
string stringData = "Welcome to my server";
byte[] message1 = Encoding.ASCII.GetBytes(stringData);
client.BeginSend(message1, 0, message1.Length, SocketFlags.None,new
AsyncCallback(SendData), client);
}

VB.NET:
Sub AcceptConn(ByVal iar As IAsyncResult)
Dim oldserver As Socket = CType(iar.AsyncState, Socket)
Dim client As Socket = oldserver.EndAccept(iar)
conStatus.Text = "Connected to: " + client.RemoteEndPoint.ToString
Dim stringData As String = "Welcome to my server"
Dim message1 As Byte() = Encoding.ASCII.GetBytes(stringData)
client.BeginSend(message1, 0, message1.Length, SocketFlags.None, New
AsyncCallback(SendData), client)
End Sub

:; 
‫ وآ‬BeginSend ‫ء ال‬C Send Callback method ‫\ إ=ء‬k
C #:
void SendData(IAsyncResult iar)
{
Socket client = (Socket)iar.AsyncState;
int sent = client.EndSend(iar);
client.BeginReceive(data, 0, size, SocketFlags.None,new
AsyncCallback(ReceiveData), client);
}

VB.NET:
Sub SendData(ByVal iar As IAsyncResult)
Dim client As Socket = CType(iar.AsyncState, Socket)
Dim sent As Integer = client.EndSend(iar)
client.BeginReceive(data, 0, size, SocketFlags.None, New
AsyncCallback(ReceiveData), client)
End Sub

:; 
‫ وآ‬BeginReceive ‫ء ال‬C Receive Callback method ‫\ إ=ء‬k

C #:
void ReceiveData(IAsyncResult iar)
{
Socket client = (Socket)iar.AsyncState;
int recv = client.EndReceive(iar);
if (recv == 0)
{

64
client.Close();
conStatus.Text = "Waiting for client...";
server.BeginAccept(new AsyncCallback(AcceptConn), server);
return;
}
string receivedData = Encoding.ASCII.GetString(data, 0, recv);
results.Items.Add(receivedData);
byte[] message2 = Encoding.ASCII.GetBytes(receivedData);
client.BeginSend(message2, 0, message2.Length, SocketFlags.None,new
AsyncCallback(SendData), client);
}

VB.NET:
Sub ReceiveData(ByVal iar As IAsyncResult)
Dim client As Socket = CType(iar.AsyncState, Socket)
Dim recv As Integer = client.EndReceive(iar)
If recv = 0 Then
client.Close()
conStatus.Text = "Waiting for client..."
server.BeginAccept(New AsyncCallback(AcceptConn), server)
Return
End If
Dim receivedData As String = Encoding.ASCII.GetString(data, 0, recv)
results.Items.Add(receivedData)
Dim message2 As Byte() = Encoding.ASCII.GetBytes(receivedData)
client.BeginSend(message2, 0, message2.Length, SocketFlags.None, New
AsyncCallback(SendData), client)
End Sub

‫م ‡=ء *„ ال‬.  ‫ف‬.p ‫ واŒن‬Server ‫ء *] *„ ال‬Cv‫ﺩ '\ ا‬1 ‫وه‬
:‫ ا‬o=‫\ ‡=ء *=وع ’ﺩ;ﺩ آ
  ا‬1 ‫ و"ﺩء‬Client

65
:‫ ا‬Namespaces ‫ف ﺩم ال‬.p
C #:
using System.Net;
using System.Net.Sockets;
using System.Text;

VB.NET:
imports System.Net
imports System.Net.Sockets
imports System.Text

7‡ \1(Main Class ‫ ال‬%;‫ )أي ﻉﺩ 'ﻉ‬Global Declaration ‫ ال‬
:‫ ا‬%;‫اﻉر‬
C #:
public class Form1 : System.Windows.Forms.Form
{
private Socket client;
private byte[] data = new byte[1024];
private int size = 1024;

:‫د ا‬.‫\  ا‬1 Connect Button ‫ ال‬


C #:
conStatus.Text = "Connecting...";
Socket newsock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse(textBox1.Text), 5020);
newsock.BeginConnect(iep, new AsyncCallback(Connected), newsock);

VB.NET:
Private client As Socket
Private data As Byte() = New Byte(1024) {}
Private size As Integer = 1024

conStatus.Text = "Connecting..."
Dim newsock As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Parse(textBox1.Text),
5020)
newsock.BeginConnect(iep, New AsyncCallback(Connected), newsock)

:; 
‫ آ‬Callback Connect method ‫\ ‡=ء‬1 \k
C #:
void Connected(IAsyncResult iar)
{
client = (Socket)iar.AsyncState;
try
{
client.EndConnect(iar);
conStatus.Text = "Connected to: " + client.RemoteEndPoint.ToString();

66
client.BeginReceive(data, 0, size, SocketFlags.None, new
AsyncCallback(ReceiveData), client);
}
catch (SocketException)
{
conStatus.Text = "Error connecting";
}
}

VB.NET:
Sub Connected(ByVal iar As IAsyncResult)
client = CType(iar.AsyncState, Socket)
Try
client.EndConnect(iar)
conStatus.Text = "Connected to: " + client.RemoteEndPoint.ToString
client.BeginReceive(data, 0, size, SocketFlags.None, New
AsyncCallback(ReceiveData), client)
Catch generatedExceptionVariable0 As SocketException
conStatus.Text = "Error connecting"
End Try
End Sub

:; 
‫ وآ‬BeginReceive ‫ء ال‬C Receive Callback method ‫\ إ=ء‬k

C #:
void ReceiveData(IAsyncResult iar)
{
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceive(iar);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
results.Items.Add(stringData);
}

VB.NET:
Sub ReceiveData(ByVal iar As IAsyncResult)
Dim remote As Socket = CType(iar.AsyncState, Socket)
Dim recv As Integer = remote.EndReceive(iar)
Dim stringData As String = Encoding.ASCII.GetString(data, 0, recv)
results.Items.Add(stringData)
End Sub

67
: Send Button ‫د ا  ال‬.‫ ا‬7‫\ إ‬k
C #:
try
{
byte[] message = Encoding.ASCII.GetBytes(newText.Text);
newText.Clear();
client.BeginSend(message, 0, message.Length, SocketFlags.None,new
AsyncCallback(SendData), client);
newText.Focus();
}
catch(Exception ex){MessageBox.Show(ex.Message);}

VB.NET:
Try
Dim message As Byte() = Encoding.ASCII.GetBytes(newText.Text)
newText.Clear
client.BeginSend(message, 0, message.Length, SocketFlags.None, New
AsyncCallback(SendData), client)
newText.Focus
Catch ex As Exception
Msgbox(ex.Message)
End Try

:; 
‫ وآ‬BeginSend ‫ء ال‬C Send Callback method ‫\ إ=ء‬k

C #:
void SendData(IAsyncResult iar)
{
try
{
Socket remote = (Socket)iar.AsyncState;
int sent = remote.EndSend(iar);
remote.BeginReceive(data, 0, size, SocketFlags.None, new
AsyncCallback(ReceiveData), remote);
}
catch(Exception ex){MessageBox.Show(ex.Message);}

VB.NET:
Sub SendData(ByVal iar As IAsyncResult)
Try
Dim remote As Socket = CType(iar.AsyncState, Socket)
Dim sent As Integer = remote.EndSend(iar)
remote.BeginReceive(data, 0, size, SocketFlags.None, New
AsyncCallback(ReceiveData), remote)
Catch ex As Exception
Msgbox(ex.Message)
End Try
End Sub

68
:; 
‫ وآ‬BeginReceive ‫ء ال‬C Receive Callback method ‫\ إ=ء‬k

C #:
void ReceiveData(IAsyncResult iar)
{
try
{
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceive(iar);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
results.Items.Add(stringData);
}
catch(Exception ex){MessageBox.Show(ex.Message);}
}

VB.NET:
Sub ReceiveData(ByVal iar As IAsyncResult)
Try
Dim remote As Socket = CType(iar.AsyncState, Socket)
Dim recv As Integer = remote.EndReceive(iar)
Dim stringData As String = Encoding.ASCII.GetString(data, 0, recv)
results.Items.Add(stringData)
Catch ex As Exception
Msgbox(ex.Message)
End Try
End Sub

4> Server ‫] *„ ال‬# ‫ا‬3‫ آ‬%; v Client ‫> ‡ن *„ ال‬v 
‫وآ‬
*‫ أ‬BeginAccept Method ‫ وال‬Socket Connection ‫ ال‬Server ‫ﻉف  ال‬
BeginConnect Method ‫ و ال‬Socket Connection ‫ ﻉف ال‬Client ‫ ال‬
... Client ‫ وال‬Server  C0 ‫ "ل ه‬pv‫ل وا‬p‫
 ار‬# 5 "'‫و‬

69
Dot Net Networks & TCP/IP Programming

Chapter 4
Advanced Multicasting Systems

Advanced Multicasting Systems

A. Architecture of Multicast Sockets


B. Using Multicast Sockets with .NET
C. Multicast Conferencing Systems:
1. Full/Half Duplex Multicast Video
Conferencing System.
2. Full/Half Duplex Multicast Desktop
Conferencing System.
3. Full/Half Duplex Multicast Text
Conferencing System

70
\>‫\ ا[ ا>
] ا‬

: Advanced Multicasting Systems :4.1

:$‫ و‬Broadcasting ‫ ال‬B$‫ و‬i:$ ‫ق‬+T‫ ا‬:$‫ و‬Multicasting ‫;‹ ال‬+."$ ,$# :/9
D%'$ i:K ‫ف "ﺡث‬1# ‫ء‬w)‫‰ ا‬7‫ ه‬gh‫ اوت  و‬gh i.* D*."‫( ا‬T‫ وآ‬iK‫ا‬1‫أ‬
‫*)ت ال‬+$ (‫ﺹ‬j‫ت و‬%&'‫*)ت ا‬+$ gh ‫ة‬+&%‫ ا‬i"/‫ه‬2 C‫ وذ‬oSTP +t‫أآ‬
...Conferencing

: Architecture of Multicast Sockets : v‫أو‬

‫"!ام ال‬#$‫ و‬UDP ‫ل ال‬1‫آ‬1P+$ +&K Multicasting ‫ ال‬I* D*."‫ ا‬3"; ‫وف اﻩ‬+./‫ ا‬B*
IGMP – ‫ل ال‬1‫آ‬1P+$ ‫"!ام‬#$ ‫ت‬K1/)/‫( إدارة ا‬-/K 3"P‫ و‬Class D Subnet Mask
Internet Protocol ‫ ال‬B* ‫ء‬wH 1‫ي ه‬7‫ وا‬Internet Group Management Protocol
‫ت‬-/K <-K ‫ي‬1"‫ ;ﺡ‬IGMP ‫ل ال‬1‫آ‬1P+$ ‫ن‬ h g"‫ ا‬D%'‫ ا‬B* ‚"; /‫ وآ‬Model
(#+ g-%‫ ا&ت ا‬3)‫ل ﺡ‬#‫ إر‬3"; ¬‫&ت )ﺡ‬- 3-‫ل اﺱ‬1‫ﺹ‬1‫ ا‬B* ¨,‫ا"ﺡ‬
TTL Time to ‫< ال‬-K ‚;‫ي أ‬1"‫ﺡ‬P ‫ و‬، (+T‫ ﺹ‬39+‫ ا‬Ik1$ i‫ إ‬B%/; ‫"ر;( إذ‬j‫ ا‬g‫وه‬
<‫ إ‬3k ) (;‫دار‬s‫( ا‬-/.‫ع ا‬1‫ و‬،(#‫ ر‬D% gk‫ا‬+"he‫ ا‬+/.‫ﻩ ا‬h ‫ي ;ﺡد‬7‫ وا‬Live
(Membership Query (K1/)/‫ ا‬BK ‫*ت‬1-.* ‫ع‬H‫ أو إر‬، (K1/)* B* ‫ إء‬، (K1/)*
Class D D ‫ﺡد‬/‫ ا‬Range ‫ ال‬B/k )*+$ ‫ﺡ;ه‬P 3"; g"‫( ا‬K1/)/‫ان ا‬1:K ‫ا‬+j‫وأ‬
.

239.255.255.255 <‫ إ‬224.0.0.0 B* Multicasting ‫ ال‬gh Range ‫ﺹ ال‬S!P 3P‫و‬


‫س ال‬#‫< أ‬-K ‫ أو‬Dynamic ‫ أو‬Static ‫ ;وي‬D%'$ * h ‫ق‬+m (uot$ ‰;‫ﺡ‬P IO"‫وﺱ‬
:‫ل‬t/‫ آ‬g-; /‫ت آ‬.;‫ز‬1"‫‰ ا‬7‫ﺱ"!م ه‬P ‫م‬K D%'$‫ و‬Scope-Relative
‰+;+/P 3"; e ¬‫> ﺡ‬,h (-‫ﺡ‬/‫ت ا‬%&'‫ ا‬I/H gh ‫ و;ﺱ"!م‬224.0.0.1 ‫ﺹ‬S!"‫ا‬
Router ‫ ال‬+&K ‫ى‬+j‫ت أ‬%&V <‫ إ‬+;+/"‫ أ* إذا أرد ا‬Router ‫ ال‬+&K ‫ى‬+j‫( أ‬%&V <‫إ‬
gh Subnet ‫ﺱ ال‬T ‫"!ام‬#‫ط ا‬+'$ B‫آ‬e ‫و‬224.0.0.2 ‫ﺹ‬S!"‫ﺱ"!م ا‬:h
:g"‫> ا‬$‫ا‬+‫ ا‬+^‫ ا‬Multicasting D ‫ت‬SS!"‫ ا‬I/H (h+./‫ و‬... ‫ى‬+j2‫ت ا‬%&'‫ا‬

http://www.iana.org/assignments/multicast-addresses

Unicast ‫"!ام ال‬#$ Backbone Tunnels ‫ ال‬B$ Multicast Packets ‫ ال‬D, 3";
<‫ إ‬Router B* D#+P ‫ و‬Router ‫( إ< ال‬%&'‫ ا‬Dj‫ دا‬B* i#‫ إر‬3"; ¬‫ ﺡ‬Tunnel
‫ ال‬B* +t%‫ ا‬+h1; * 1‫ وه‬Unicast ‫ب ال‬1-#‫"!ام أ‬#$ Backbone Tunnel ‫ ال‬+&K +j‫أ‬
i.;‫ز‬1"$ 1‫م ه‬1,;‫ و‬Router ‫ ﺱ!( واﺡة إ< ال‬D#+P ¬‫( ﺡ‬%&'‫ ا‬gh Bandwidth
/".; ‫ اﻩ‬1‫ ه‬Multicast ‫ ال‬gh ‫ﺡة‬1‫( ا‬-%'/‫ ا‬Unicast ‫"!ام ال‬#$ ‫ة‬wiH2‫< ا‬-K
.UDP Connectionless Protocol ‫"!ام ال‬#‫< ا‬-K D*‫ آ‬D%'$

Peer ‫ت ال‬%&V g‫ت وه‬%&'‫ ا‬B* ‫اع‬1‫( أ‬uou gh Multicasting ‫"!ام ال‬#‫ ا‬::%/;‫و‬
‫ي‬7‫ ا‬Group ‫ و إ< ال‬B* D#+; ‫ و‬D&,"‫ ;ﺱ‬D%‫ وا‬Server ‫ز‬i) ‫د‬1H‫ و‬e ¬‫ ﺡ‬to Peer

71
‫( واﺡة إ< ال‬#‫ل ر‬#‫ إر‬3"; ¬‫ ﺡ‬Server Based Network gt‫ع ا‬1:‫ وا‬،‫ﻩ‬h 1‫ه‬
¬t‫ع ا‬1:‫ أ* ا‬، (%&'‫ ا‬gh ‫ة‬wiH2‫( ا‬,$ <-K i.;‫ز‬1"$ Server ‫م ال‬1,;‫ و‬Server
.$ 3"P ‫ل‬#‫ر‬s‫( ا‬-/K ‫ن‬ h g"‫ ا‬D%'‫ ا‬B* ‚"; /‫ وآ‬، Router ‫ل ال‬oj B* 3"h
(#‫ ر‬Client ‫ ال‬D#+;‫ و‬IP Multicast ‫ ال‬C-/P g"‫( ا‬K1/)/‫ إ< ا‬Client ‫م ال‬/‚‫ا‬
(K1/)/‫ ا‬gh ‫ة‬wiH2‫< ا‬-K i.;‫ز‬1"$ Router ‫م ال‬1,; ¬‫ ﺡ‬Router ‫واﺡة إ< ال‬
.Routing Table ‫*ﺱ"!* ال‬

gh ‫ل‬#‫ر‬s‫ ا‬3"; Broadcasting ‫"!ام ال‬#$ ‫ل‬#‫ر‬s‫ ا‬gh ‫ آن اﺡل‬/‫وآ‬


‫ ال‬gh /‫ آ‬D%‫( وﺱ إ< ا‬:.* (K1/)* <‫ز *ﺡد إ‬iH B* Multicasting
/‫ﺹ آ‬S!"‫ ا‬3";‫ص و‬j Group ‫ة‬wiH2‫ ا‬B* (K1/)* D‫ن آ‬1%ُP ¬‫ ﺡ‬، Broadcast
IP Multicast ‫ﺱ ال‬T (K1/)* D‫ آ‬C-"/P ¬‫ ﺡ‬IP Multicasting ‫¨ ال‬h‫ و‬,$# +‫ذآ‬
one to (K1/)* <‫ل إ‬#‫ر‬s‫ ا‬i-K (-t*2‫ ا‬B*‫ و‬Multicasting D ‫ل‬%V‫ة أ‬K H1;‫و‬
: one to Multi Group (K1/)* B* +t‫ل إ< أآ‬#‫ر‬s‫ و ا‬Group

:One to Group (K1/)* ‫ل‬#‫ر‬s‫ – ا‬1


Receiver Users ‫ﻩ ال‬%-/; ‫ي‬7‫ ا‬IP Multicasting ‫ﺱ ال‬T Sender User ‫ ال‬C-/; ‫ﻩ‬h‫و‬
‫ إ< ال‬Unicast ‫ ك‬D#+P ¬‫‚ﻩ ﺡ‬K‫ أ‬I/H <‫ إ‬Group ‫ ال‬Dj‫ دا‬B* ‫ل‬#‫ر‬s‫ ا‬3";‫و‬
‫ب ال‬1-#G$ (K1/)/‫ ا‬gh ‫‚ء‬K2‫( ا‬h‫< آ‬-K i.;‫ز‬1"$ ‫م‬1,; ¬‫ ﺡ‬Access Point
:g"‫ ا‬D%'‫ ا‬gh /‫ وآ‬Broadcast

72
:One to Multi-Groups (K1/)* B* +t‫ل إ< أآ‬#‫ر‬s‫ ا‬-2

3";‫ و‬Receiver Users BK ‹-"!* Sender User D IP Multicasting ‫ن ال‬1%; 9 ‫ﻩ‬h‫و‬


‫ت‬K1/)* <‫ وإ‬i:* 1‚K 1‫ي ه‬7‫( ا‬K1/)/‫ إ< ا‬Group ‫ ال‬Dj‫ دا‬User B* ‫ل‬#‫ر‬s‫ا‬
... i ‫ل‬#‫ر‬s‫; ا‬+ g"‫ت ا‬K1/)/- Address List ‫"!ام‬#$ ‫ﺡ;ه‬P 3";‫ و‬، ‫ى‬+j‫أ‬

73
:Using Multicast Sockets with .NET: k

‫< ال‬-K :h+.P‫ اوت  و‬gh Multicasting ‫ ال‬I* D*."‫( ا‬T‫ آ‬,$# :‫ﺡ‬+V
‫ت‬-/.‫‰ ا‬7‫ ه‬DST"‫ ا‬B* ‫ء‬g'$ B& ‫ف‬1# :‫ وه‬i$ (‫ ا!ﺹ‬Classes ‫ وال‬Members
Conference System ‫ء ^م‬:&$ ‫م‬1,:# C‫ ذ‬.$‫( و‬-t*2‫ ا‬B* (K1/)* i-K ¨&O‫و‬
... Multicasting ‫< ال‬-K ‫ا‬/".*

: Multicasting ‫ ال‬I* D*."‫ ا‬gh (##2‫ت ا‬-/.‫ ا‬B*

: Joining || Drop Group (K1/)* B* ‫وج‬+!‫م أو ا‬/‚e‫ ا‬-1

:S"‫ى ا‬1# ¨,‫ﺡ‬P ‫ت‬-/K ‫ أي‬Multicast Group ‫م إ< ال‬/‚e‫( ا‬-/K ‫م‬w-P e
udpClient Object ‹;+.P .$ C‫ ذ‬3";‫ و‬، ‫ﺡد‬/‫ ا‬IP Multicasting ‫ وال‬port ‫< ال‬-K
‫ي‬7‫ ا‬IP Multicasting ‫;‹ ال‬+.P 3"; JoinMulticastGroup Method ‫"!ام ال‬#$‫و‬
:g-; /‫ إﻩ وآ‬3‚: ‫ف‬1#
C #:
UdpClient sock = new UdpClient(5020);
sock.JoinMulticastGroup(IPAddress.Parse("225.100.0.1"), 50);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);

VB.NET:
Dim sock As UdpClient = New UdpClient(5020)
sock.JoinMulticastGroup(IPAddress.Parse("225.100.0.1"), 50)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)

:(K1/)* B* ‫م‬/‚e‫( ا‬-/K ‫ء‬s g-; /‫وآ‬


C #:
sock.DropMulticastGroup(IPAddress.Parse("225.100.0.1"));

VB.NET:
sock.DropMulticastGroup(IPAddress.Parse("225.100.0.1"))

‫ أو‬3‚ DropMulticastGroup ‫ و‬JoinMulticastGroup Methods ‫ﺱ"!م ال‬P ‫إذ‬


Class ‫"!ام‬#$‫ و‬، Multicast Group ‫ ال‬B* B;‫و‬:.‫ ا‬B* (K1/)* ‫ان أو‬1:K ‫إء‬
Multicast Group gh i.* D*." IP Address List B;w!P ::%/; :MulticastOption
(;1‚K (hks ‫ل‬t/‫ آ‬g-; /‫ﺱ"!م آ‬P‫ و‬Multicast Group ‫ي‬2 Drop ‫ و‬Join D/.
: Multicast D#‫&ل ر‬,"#e

: g-; /‫ وآ‬UDP Socket ‫ف ال‬+. v‫أو‬


C #:
mcastSocket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,
ProtocolType.Udp);

VB.NET:
mcastSocket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp)

Group ‫ ال‬gh ‫ﻩ‬j‫; إد‬+ ‫ي‬7‫ ا‬IP ‫ ال‬i‫ إ‬:‫ ﺱ‬3u Address List ‹;+."$ ‫م‬1, k
/‫ وآ‬Bind ‫د‬1t/‫"!ام ا‬#$ ‫ت‬1%‫ﺱ‬$ iO$+ ‫ﺱﻩ‬T:$ ‫ان‬1:.‫ ا‬Dj; User ‫ ال‬D.) ‫أو‬
: g-;

74
C #:
IPAddress localIPAddr = IPAddress.Parse(Console.ReadLine());
mcastSocket.Bind(IPlocal);

VB.NET:
Dim localIPAddr As IPAddress = IPAddress.Parse(Console.ReadLine)
mcastSocket.Bind(IPlocal)

:g-; /‫ﺡد آ‬/‫ان ا‬1:.‫ ا‬i :‫ وﺱ‬Multicast Option ‫;‹ ال‬+."$ ‫م‬1, 3k
C #:
MulticastOption mcastOption;
mcastOption = new MulticastOption(localIPAddr);

VB.NET:
Dim mcastOption As MulticastOption
MulticastOption(localIPAddr New = mcastOption)

‫ات‬+"*‫رو‬$ (uou ‫د‬1t/‫‰ ا‬7‫ ه‬7jGP ¬‫ ﺡ‬SetSocketOption <-K +"‫ ‚‹ ا‬3u B*‫و‬
UDP ‫ أو‬TCP ‫ أو‬Socket <-K ‫ أو‬IPv6 <-K ‫ أو‬IP <-K +"‫ى ا‬1"‫ول "ﺡ; *ﺱ‬2‫ا‬
Multicast <‫ إ‬IP 3k 1‫;‰ ه‬+ * ‫ إذ‬IP <-K +"‫ف ﺱ"!م ا‬1# ‰7‫ ه‬:"‫ ﺡ‬gh‫و‬
‫"ر‬je‫ ا‬B%/;‫;( و‬1‚K (hk‫; إ‬+ ¬‫ ﺡ‬+"‫ع ا‬1 ‫ ﺡد‬gt‫ ا‬+"*‫ ا&رو‬gh‫ و‬Group
:‫ا ﺱ‬+j‫ وأ‬DropMembership (;1‚K ‫ أو إء‬AddMembership ‫;ﻩ‬1‚K (hk‫ إ‬B$
:g-; /‫'ﻩ و آ‬ $ :/9 ‫ي‬7‫ وا‬MulticastOption Object ‫إﻩ ال‬
C #:
mcastSocket.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership,mcastOption);

VB.NET:
Dim mcastOption As MulticastOption
mcastOption = New MulticastOption(localIPAddr)

:Sending Data to a Multicast Group (K1/)* <‫ل إ‬#‫ر‬s‫ ا‬-2

Socket ‫;‹ ال‬+.P B* e‫ أو‬$e IP Multicasting ‫"!ام ال‬#$ ‫ل‬#‫ر‬s‫ ا‬IO"‫ﺡ"< ﺱ‬
<‫ إ‬Port ‫ ال‬39‫ ور‬IP Multicasting ‫د ال‬:#‫ وإ‬UDP Connection ‫"!ام ال‬#$ Object
¬‫ ﺡ‬sendto method ‫"!ام ال‬#$ ‫ل‬#‫ر‬s‫ ا‬IO"‫ وﺱ‬... IPEndPoint Object ‫ال‬
(#‫ل ر‬#‫ر‬s g-; /‫ وآ‬IPEndPoint Object ‫ وال‬data as Bytes Array ‫ ال‬i :‫ﺱ‬
:(S

C #:
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,
ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse((“225.100.0.1”), 5020);
byte[] data = Encoding.ASCII.GetBytes(msg.Text);
server.SendTo(data, iep);
server.Close();
msg.Clear();
msg.Focus();

75
VB.NET:
Dim server As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Parse("225.100.0.1"),
5020)
Dim data As Byte() = Encoding.ASCII.GetBytes(msg.Text)
server.SendTo(data, iep)
server.Close
msg.Clear
msg.Focus

Memory Stream ‫"!ام ال‬#‫ ا‬B* $e ot* ‫رة‬1‫ل ﺹ‬#‫ر‬ ‫ آ‬Binary Data ‫ل‬#‫ر‬s‫و‬
C‫ ذ‬.$‫ و‬Byte Array <‫ إ‬i-;1‫ﺡ‬P 3u Stream («‫< ه‬-K ‫ة‬+‫اآ‬7‫ ا‬gh ‫رة‬1S‫ ا‬B;w!"
:g-; /‫ وآ‬sendto Method ‫"!ام ال‬#$ i#‫إر‬
C #:
MemoryStream ms = new MemoryStream();
PictureBox1.Image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arrImage = ms.GetBuffer();
ms.Close();
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,
ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse(“225.100.0.1”), 5020);
server.SendTo(arrImage,iep);

VB.NET:
Dim ms As MemoryStream = New MemoryStream
PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim arrImage As Byte() = ms.GetBuffer
ms.Close
Dim server As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Parse("225.100.0.1"),
5020)
server.SendTo(arrImage, iep)

:Receiving Data From a Multicast Group (K1/)* B* ‫&ل‬,"#e‫ ا‬-3

‫ ا!ص‬IP Multicast ‫ﺡ; ال‬P B* e‫ أو‬$e (K1/)* B* ‫&ل‬,"#e‫ ا‬IO"‫ﺡ"< ﺱ‬
3";‫ و‬Receive Method ‫"!ام ال‬#$ ‫&ل ا&ت‬,"#‫ ا‬3u ‫م إﻩ‬/‚e‫( و ا‬K1/)/$
:list Box gh ik+K‫( و‬S (#‫&ل ر‬,"#e g-; /‫ آ‬C‫ذ‬
C #:
UdpClient sock = new UdpClient(5020);
sock.JoinMulticastGroup(IPAddress.Parse(“225.100.0.1”), 50);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);

byte[] data = sock.Receive(ref iep);


string stringData = Encoding.ASCII.GetString(data, 0, data.Length);
listBox1.Items.Add(iep.Address.ToString() +" :_ "+stringData );

VB.NET:
Dim sock As UdpClient = New UdpClient(5020)

76
sock.JoinMulticastGroup(IPAddress.Parse("225.100.0.1"), 50)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
Dim data As Byte() = sock.Receive(iep)
Dim stringData As String = Encoding.ASCII.GetString(data, 0, data.Length)
listBox1.Items.Add(iep.Address.ToString + " :_ " + stringData)
Receive ‫ ال‬B* ‫&ل ا&ت‬,"#e memory Stream ‫رة ﺱ"!م ال‬1‫&ل ﺹ‬,"#e‫و‬
‫ة‬+* ‫رة‬1‫ إ< ﺹ‬i-;1‫ﺡ‬P 3u Stream Data («‫< ه‬-K ‫ة‬+‫اآ‬7‫ ا‬gh i:;w!P‫ و‬Method
:g-; /‫ وآ‬image.FromStream Method ‫"!ام ال‬#$ ‫ى‬+j‫أ‬
C#:
UdpClient sock = new UdpClient(5020);
sock.JoinMulticastGroup(IPAddress.Parse(“225.100.0.1”));
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);

byte[] data = sock.Receive(ref iep);


MemoryStream ms = new MemoryStream(data);
pictureBox1.Image = Image.FromStream(ms);
sock.Close();

VB.NET:
Dim sock As UdpClient = New UdpClient(5020)
sock.JoinMulticastGroup(IPAddress.Parse("225.100.0.1"), 50)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
Dim data As Byte() = sock.Receive(iep)
Dim stringData As String = Encoding.ASCII.GetString(data, 0, data.Length)
listBox1.Items.Add(iep.Address.ToString + " :_ " + stringData)

: ‫  * ت ا="ت‬Multicasting ‫ﺩام ال‬p‫*‹>ت ه*  ا‬

‫ل ال‬#‫( إر‬-/. Network Stream ‫"!ام ال‬#‫ ا‬IO"‫ ﺱ‬e :‫ﺡ¶ أ‬o/‫ ا‬B* -1
gh ‫ *"ح‬+d 1‫ وه‬TCP Socket Connection ‫د‬1H‫ و‬i*‫"!ا‬#‫† ا‬-O"; ‫ إذ‬Multicasting
Binary ‫ل‬#‫ر‬s memory Stream ‫"!ام ال‬#$ i:K ‫ض‬."‫ و;ﺱ‬Multicasting ‫ال‬
... sendto method ‫ ال‬+&K Stream

‫( أو‬%&V ‫د‬1H‫م و‬K (‫ ﺡ‬gh loopback ‫ ك‬Multicasting ‫"!ام ال‬#‫ ا‬C:%/; e -2
CSP‫م ا‬K (‫ ﺡ‬gh Multicasting ‫ت ال‬,&OP B* ‫( أي‬$+)P IO"‫ﺱ‬P B C7 ‫ل‬SP‫ا‬
.(%&'$

،‫دة‬."* ‫ت‬iH B* D&,"‫ﺡ¬ ;ﺱ‬$ (K1/)* B* +t‫ إ< أآ‬3‚:; ‫ز أن‬iH D% B%/; -3
.‫ت‬K1/)* ‫ة‬K <‫ل إ‬#‫ر‬s‫ ا‬IO"‫ ;ﺱ‬C7‫آ‬

sendto ‫ ال‬+&K Multicasting Data ‫ل ال‬#‫ر‬s (‫ﺡ‬1/‫ﺱ‬/‫( ا‬.‫ن اﺱ‬1%P ‫دة‬.‫ ا‬gh -4
Stream ‫ وال‬Binary Reader & Writer ‫"!ام ال‬#‫ ا‬C:%/; C7 ‫ *ﺡودة‬Method
... i:* e$ ‫&ل‬,"#e‫ل وا‬#‫ر‬s Reader & Writer

C7 i%-/P g"‫ ا‬Network Topology D ¨h‫ و‬IP Multicast ‫"ر ال‬j‫( ا‬-/K 3"P -5
.. ,$# ‫"ﻩ‬:$ * 1‫ﺡدة وه‬/‫ ا‬B;‫و‬:.$ ,"‫ ا‬B* $e

77
:Multicasting Conferencing Systems ‫ '?"Ÿ *=وع م ا
ž'
ات‬3k

‫ة‬+k‫ﺡ‬/‫ء ا‬, $ +k‫ﺡ‬/‫م ا‬1,; ¬‫( ﺡ‬T‫( ﺹ‬h+d ‫د‬1H‫ض و‬+"T ‫ف‬1# ¨&O"‫ا ا‬7‫ ه‬gh
(;‫"ذ رؤ‬#2‫ ا‬IO"‫ ;ﺱ‬/‫"ذ وآ‬#2‫ون ا‬+; ‫ب‬oO‫ ا‬D.H :‫; ه‬+ ‫ﻩ إذ‬$om ‫ أ*م‬.$ BK
IO"‫ ;ﺱ‬/‫ آ‬Power Point Slides ‫< ال‬-K ‫ة‬+k‫ﺡ‬/‫ض ا‬+K (%*‫( إ< إ‬hks$ ‫ﻩ‬$om
... Text Chatting ‫"!ام‬#$ ‫"ذ‬#2‫ ا‬I* ‫ب ا"ﺡث‬oO‫ا‬

‫ات‬+/Pa* ‫ ^م‬g‫( رﺱ( وه‬/^‫( أ‬uou <‫ات إ‬+/Pa/‫ ^م ا‬3‫ﺱ‬,"$ :‫م ه‬1, ‫ف‬1#
‫م‬1, ‫ف‬1# (;‫ ا&ا‬gh ،(S:‫ات ا‬+/Pa/‫"† و^م ا‬%/‫ ا‬O# ‫ات‬+/Pa* ‫ و^م‬1;T‫ا‬
:g"‫ ا‬D%'‫ ا‬gh /‫*— و آ‬+&- (‫ﺱ‬+‫( ا‬V'‫ ا‬D/.$

: Full/Half Duplex Multicast Video Conferencing System -1

DirectX 9 ‫ ال‬I* D*."P g"‫( وا‬H‫ ا!ر‬Classes ‫ ال‬B* (K1/)* Microsoft : ‫ت‬+h‫و‬
‫ت أو أي‬1S‫ أو ا‬Scanner ‫ا أو ال‬+*%‫ ا‬I* D*." i*‫"!ا‬#‫ ا‬IO"‫ة ﺡ¬ ﺱ‬+V&*
Direct Show Dot Net Classes‫ف ﺱ"!م ال‬1# ¨&O"‫ا ا‬7‫ ه‬gh‫ى و‬+j‫( أ‬h+m
,‫ﺡ‬e i#‫ إر‬IO"‫ ﺡ¬ ﺱ‬Picture box ‫< ال‬-K ik+K‫ا و‬+*%‫ ا‬+&K ‫رة‬1‫ط ﺹ‬,"e
* 1‫ وه‬Sendto method ‫ وال‬memory Stream ‫"!ام ال‬#$ Multicast Group ‫إ< ال‬
.. ,$# ‰:$

/‫وع وآ‬+'/‫ إ< ا‬Direct Show Classes ‫ ال‬3‚ ‫ف‬1# i*‫"!ا‬#‫ ا‬IO"‫وﺡ"< ﺱ‬
:g-;

78
: ‫"!ام‬#$ iK"‫ف ﺱ‬1# i.* D*." <"‫وﺡ‬
C #:
using DShowNET;
using DShowNET.Device;

VB.NET:
imports DShowNET
imports DShowNET.Device

:g"‫ ا‬D%'‫ ا‬gh /‫ا آ‬+*%‫ ا‬+&K ‫ل‬#‫ر‬s‫*— ا‬+$ D%V ‫ن‬1%#‫و‬

D'P (;‫ا‬$ :K ‫ل‬j‫د‬s‫ز ا‬iH ‫"ر‬js DeviceSelector Class ‫ف ﺱ"!م ال‬1#
:g-; /‫*— وآ‬+&‫ا‬

C #:
DeviceSelector selector = new DeviceSelector( capDevices );
selector.ShowDialog( this );

79
dev = selector.SelectedDevice;

VB.NET:
Dim selector As DeviceSelector = New DeviceSelector(capDevices)
selector.ShowDialog(Me)
dev = selector.SelectedDevice

: g-; /‫;ة آ‬H method ‫'ء‬ $ ‫م‬1, ‫ف‬1# ‫ا‬+*%‫ ا‬+&K ‫رة‬1S‫"ط ا‬s ‫و‬
C #:
void OnCaptureDone()
{
try {
Trace.WriteLine( "!!DLG: OnCaptureDone" );
toolBarBtnGrab.Enabled = true;
int hr;
if( sampGrabber == null )return;
hr = sampGrabber.SetCallback( null, 0 );
int w = videoInfoHeader.BmiHeader.Width;
int h = videoInfoHeader.BmiHeader.Height;
if( ((w & 0x03) != 0) || (w < 32) || (w > 4096) || (h < 32) || (h > 4096) )
return;
int stride = w * 3;
GCHandle handle = GCHandle.Alloc( savedArray, GCHandleType.Pinned );
int scan0 = (int) handle.AddrOfPinnedObject();
scan0 += (h - 1) * stride;
Bitmap b = new Bitmap( w, h, -stride, PixelFormat.Format24bppRgb, (IntPtr)
scan0 );
handle.Free();
savedArray = null;
Image old = pictureBox.Image;
pictureBox.Image = b;
if( old != null ) old.Dispose();
toolBarBtnSave.Enabled = true;}
catch( Exception){}
}

VB.NET:
Private Sub OnCaptureDone()
Try
Trace.WriteLine("!!DLG: OnCaptureDone("
toolBarBtnGrab.Enabled = True
Dim hr As Integer
If sampGrabber Is Nothing Then
Return
End If
hr = sampGrabber.SetCallback)Nothing(0 ،
Dim w As Integer = videoInfoHeader.BmiHeader.Width
Dim h As Integer = videoInfoHeader.BmiHeader.Height
If)) w And& H03) <> 0 (OrElse) w < 32 (OrElse) w > 4096 (OrElse) h < 32 (
OrElse) h > 4096 (Then
Return

80
End If
Dim stride As Integer = w * 3
Dim handle As GCHandle = GCHandle.Alloc(savedArray,
GCHandleType.Pinned(
Dim scan0 As Integer = CInt)handle.AddrOfPinnedObject(()
scan0 += (h - 1) * stride
Dim b As Bitmap = New Bitmap(w, h, -stride, PixelFormat.Format24bppRgb ،
New IntPtr(scan0((
handle.Free()
savedArray = Nothing
Dim old As Image = pictureBox.Image
pictureBox.Image = b
If Not old Is Nothing Then
old.Dispose()
End If
toolBarBtnSave.Enabled = True
Catch e1 As Exception
End Try
End Sub

:‫رة‬1S‫ط ا‬,"‫( ا‬-/K ‫ار‬+/"#e ‫ﻩ‬h g"‫د ا‬1%‫( ا‬hk‫ وإ‬Timer D/K 3u
C #:
int hr;
int size = videoInfoHeader.BmiHeader.ImageSize;
savedArray = new byte[ size + 64000 ];

VB.NET:
Dim hr As Integer
Dim size As Integer = videoInfoHeader.BmiHeader.ImageSize
savedArray = New Byte(size + 64000) {}

gh ‫ﻩ‬.‚‫رة و‬1S‫ل ا‬#‫ إر‬method ‫ف ﺱ"!م‬1# +j2‫ف ا‬+O‫رة إ< ا‬1S‫ل ا‬#‫ر‬s‫و‬
:g-; /‫ وآ‬Timer
C #:
try
{
MemoryStream ms = new MemoryStream();
pictureBox.Image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arrImage = ms.GetBuffer();
ms.Close();
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,
ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse(textBox1.Text), 5020);
server.SendTo(arrImage, iep);
server.Close();}
catch (Exception){}

81
VB.NET:
Try
Dim ms As MemoryStream = New MemoryStream
pictureBox.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim arrImage As Byte() = ms.GetBuffer
ms.Close
Dim server As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Parse(textBox1.Text),
5020)
server.SendTo(arrImage, iep)
server.Close
Catch generatedExceptionVariable0 As Exception
End Try

(;‫ رؤ‬B* B%/"; ‫ف‬1# /‫ﻩ آ‬$om <‫ا إ‬+*%‫ ا‬+&K ‫رة‬1S‫ل ا‬#‫ إر‬+k‫ﺡ‬/‫ ا‬IO"‫ ;ﺱ‬:‫وه‬
D#+# ¬‫( ﺡ‬%-# e (%&' ‫"!ا*ﻩ‬#‫ ا‬:‫ض ه‬+"T ‫ف‬1#‫ا و‬+*%‫ ا‬+&K ‫ﻩ‬$om
I;‫ز‬1P Access Point ‫ ال‬e1"; ‫ف‬1#‫ و‬Unicast ‫ب ال‬1-#G$ Access Point ‫ا&ت إ< ال‬
3i i-#+;‫ و‬Multicast Group ‫ إ< ال‬B/‚:/‫‚ء ا‬K2‫ ا‬I/H <‫ا&ت إ‬
:g"‫ ا‬D%'‫ ا‬gh /‫ وآ‬Broadcast ‫"!ام ال‬#$

‫ة‬7P#2‫( ا‬K1/)* B"K1/)* <‫ إ‬3‚:; +k‫ﺡ‬/‫ن ا‬ h ¨$‫ اﺱ‬D%'‫ ا‬gh ¶‫ﺡ‬o /‫وآ‬
‫ب‬oO‫( ا‬K1/)*‫ و‬،i-K ‫ﻩ‬$om ‫رة‬1‫ ﺹ‬D&,"‫ﺱ‬# ¬‫ ﺡ‬225.100.1.1 g‫وه‬

82
‫ل‬#‫ر‬s‫( ا‬-/K ‫ن‬ h ‚;‫ﺡ¶ ا‬o /‫ وآ‬.. i‫رة إ‬1S‫ ا‬D#+; ‫ف‬1# g"‫ وا‬224.100.0.1
... Unicast ‫"!ام ال‬#$ 3"P Access Point2 ‫ وال‬Access Point1 ‫ ال‬B$
—*+$ ‫ إ'ء‬B* $e ، ‫ﻩ‬$om (;‫"ذ رؤ‬#2‫ وا‬3‫"ذه‬#‫ب رؤ;( أ‬oO‫ ا‬IO"‫وﺡ"< ;ﺱ‬
‫رة‬1S‫&ل ا‬,"#e ,$# i:‫ﺡ‬+V g"‫ ا‬method ‫ﺱ ال‬T ‫ﺱ"!م‬:# ¬‫&ل ﺡ‬,"#e‫ا‬
:g"‫ ا‬D%'‫ ا‬gh /‫; آ‬H New Form D/.$ 39 ‫&ء‬-‫و‬

: Multicast Group ‫ ال‬B* ‫رة‬1S‫&ل ا‬,"#e ("‫ ا‬Namespaces ‫ف ﺱ"!م ال‬1#

C #:
using System.Net.Sockets ;
using System.Net;
using System.IO;
using System.Threading;

VB.NET:
imports System.Net.Sockets
imports System.Net
imports System.IO
imports System.Threading

:g-; /‫&ل آ‬,"#e‫ ا‬method ($"%$ 39 3u

void Image_Receiver()
{
UdpClient sock = new UdpClient(5020);
sock.JoinMulticastGroup(IPAddress.Parse(textBox1.Text));
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);

83
byte[] data = sock.Receive(ref iep);
MemoryStream ms = new MemoryStream(data);
pictureBox1.Image = Image.FromStream(ms);
sock.Close();
}
VB.NET:
Sub Image_Receiver()
Dim sock As UdpClient = New UdpClient(5020)
sock.JoinMulticastGroup(IPAddress.Parse(textBox1.Text))
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
Dim data As Byte() = sock.Receive(iep)
Dim ms As MemoryStream = New MemoryStream(data)
pictureBox1.Image = Image.FromStream(ms)
sock.Close()
End Sub

(-/.$ D'"‫ ^م ا‬+uG"; e <"‫ ﺡ‬Threading ‫"!ام ال‬#‫ ا‬B* $e iK"‫وﺡ"< ﺱ‬
‫"!ام ال‬#e g"‫د ا‬1%‫ﻩ ا‬h Ik‫ و‬Timer D/.$ 39 C7$ ‫م‬1, <"‫ وﺡ‬، ‫&ل‬,"#e‫ا‬
: Threading
C#:
Thread myth;
myth= new Thread (new System.Threading .ThreadStart(Image_Receiver));
myth.Start ();

VB.NET:
Dim myth As Thread
myth = New Thread(New System.Threading.ThreadStart(Image_Receiver))
myth.Start

39 JPEG Image File («‫< ه‬-K ‫ا‬+*%‫ ا‬+&K (O,"-/‫رة ا‬1S‫ ا‬B;w!P B* B%/"P <"‫وﺡ‬
:g-; /‫ﻩ آ‬K"#‫ وا‬saveFileDialog ‫'ء‬ $
C #:
try
{
saveFileDialog1.Filter = "JPEG Image (*.jpg)|*.jpg" ;
if(saveFileDialog1.ShowDialog() == DialogResult.OK)
{

string mypic_path = saveFileDialog1.FileName;


pictureBox1.Image.Save(mypic_path);
}
}
catch (Exception){}

VB.NET:
Try
saveFileDialog1.Filter = "JPEG Image (*.jpg)|*.jpg"
If saveFileDialog1.ShowDialog = DialogResult.OK Then
Dim mypic_path As String = saveFileDialog1.FileName
pictureBox1.Image.Save(mypic_path)

84
End If
Catch generatedExceptionVariable0 As Exception
End Try

<"‫ وﺡ‬، Video Conference System ‫ ال‬1‫ول وه‬2‫وع ا‬+'/‫ ا‬B* ‫ء‬i"e‫ ا‬3P 9 :‫وه‬
D/.$ ‫م‬1, ‫ف‬1# Power Point ‫*— ال‬+$ ‫"!ام‬#$ ‫ة‬+k‫ﺡ‬/‫ض ا‬+K +k‫ﺡ‬/‫ ا‬IO"‫;ﺱ‬
... †"%/‫ ا‬O# ‫ات‬+/Pa* ‫وع‬+'*

:Full/Half Duplex Multicast Desktop Conferencing System -2

‫*— ال‬+$ ‫"!ام‬#$ ‫ة‬+k‫ﺡ‬/‫ض ا‬+K B* ‫"ذ‬#2‫ ا‬B%/P 1‫وع ه‬+'/‫ا ا‬7‫ ه‬B* ‫ف‬i‫ا‬
، (&-O‫ة ا‬wiH‫"ذ إ< أ‬#2‫ز ا‬iH B* †"%/‫ ا‬O# ‫رة‬1‫ ﺹ‬D#+"# ¬‫ ﺡ‬Power Point
‫م‬1," Classes ‫ى إ'ء‬1# ‫ء‬gV gh ¨$‫*— اﺱ‬+&‫ ا‬BK ‫ل‬#‫ر‬s‫( ا‬-/K ‹-"!P e‫و‬
3u B*‫ و‬Multicast Group ‫ إ< ال‬i#‫ إر‬3u B*‫"† و‬%/‫ ا‬O# ‫رة‬1‫ط ﺹ‬,"$
... Data Show Projector ‫"!ام‬#$ ‫ب‬oO‫< ا‬-K ik+K‫ و‬i&,"#‫ا‬

: —*+&‫ ا‬D/K >O!* :‫وه‬

‰‫ز‬iH <-K ‫ة‬+k‫ﺡ‬/‫ح ا‬+'$ ‫م‬1,; ‫"ذ‬#2‫ن ا‬ h g"‫ ا‬D%'‫ ا‬B* ¶‫ﺡ‬o /‫وآ‬
(;‫ أﺡد‬g‫( ه‬-/.‫‰ ا‬7‫ن ه‬ h ‚;‫ﺡ¶ أ‬o /‫ب وآ‬oO‫رة إ< ا‬1S‫ ا‬D#+;‫ و‬gS!'‫ا‬
(K1/)* ‫ إ'ء‬B* $e B‫آ‬e Full || Half Duplex B‫)ه‬P$ i-.H B%/; /‫)‰ وآ‬Pe‫ا‬
i-#+;‫ﻩ و‬P+k‫"ذ *ﺡ‬#2‫ض ا‬+.; ¬‫"ذ ﺡ‬#2‫† إ< ا‬O‫ ا‬B* ‫ل‬#‫ر‬s‫( ا‬-/. ‫;ة‬H
‫رة‬1S‫ ا‬D#+; ‫"ذ إذ‬#2‫< ا‬-K ‰‫ز‬iH ‫ض‬+K ‫ب‬oO‫ أﺡ ا‬IO"‫ب و;ﺱ‬oO‫( ا‬K1/)* <‫إ‬
... ‫"ذ‬#2‫( ا‬K1/)* <‫إ‬

D%'‫ ا‬gh /‫; آ‬H New Form D/.$ 39 †"%/‫ ا‬O# ‫رة‬1‫ل ﺹ‬#‫*— إر‬+$ ‫'ء‬s‫و‬
:g"‫ا‬

85
:g-; /‫"† وآ‬%/‫ ا‬O# ‫رة‬1‫ط ﺹ‬,"e Three Classes D/.$ ‫م‬1, ‫ف‬1# (;‫ ا&ا‬gh

‫ وال‬GDI+ ‫"!ام ال‬#$ †"%/‫ ا‬O# ‫رة‬1‫ط ﺹ‬,"e PlatFormInvokeGDI32.cs e‫أو‬


:API

C #:
using System;
using System.Runtime.InteropServices;
namespace SampleGrabberNET
{

//This class shall keep the GDI32 APIs being used in our program.
public class PlatformInvokeGDI32
{

#region Class Variables


public const int SRCCOPY = 13369376;
#endregion

#region Class Functions


[DllImport("gdi32.dll",EntryPoint="DeleteDC")]
public static extern IntPtr DeleteDC(IntPtr hDc);

[DllImport("gdi32.dll",EntryPoint="DeleteObject")]
public static extern IntPtr DeleteObject(IntPtr hDc);

[DllImport("gdi32.dll",EntryPoint="BitBlt")]
public static extern bool BitBlt(IntPtr hdcDest,int xDest,int
yDest,int wDest,int hDest,IntPtr hdcSource,int xSrc,int ySrc,int RasterOp);

[DllImport ("gdi32.dll",EntryPoint="CreateCompatibleBitmap")]
public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc,
int nWidth, int nHeight);

[DllImport ("gdi32.dll",EntryPoint="CreateCompatibleDC")]

86
public static extern IntPtr CreateCompatibleDC(IntPtr hdc);

[DllImport ("gdi32.dll",EntryPoint="SelectObject")]
public static extern IntPtr SelectObject(IntPtr hdc,IntPtr bmp);
#endregion

#region Public Constructor


public PlatformInvokeGDI32()
{
}
#endregion
}}

VB.NET:
System Imports
System.Runtime.InteropServices Imports
SampleGrabberNET Namespace

.This class shall keep the GDI32 APIs being used in our program'
PlatformInvokeGDI32 Class Public

"Class Variables" Region#


13369376 = Integer As SRCCOPY Const Public
End Region#

"Class Functions" Region#


<("DllImport("gdi32.dll",EntryPoint:="DeleteDC>_
IntPtr As (IntPtr As hDc ByVal)DeleteDC Function Shared Public
Function End

<("DllImport("gdi32.dll",EntryPoint:="DeleteObject>_
IntPtr As (IntPtr As hDc ByVal)DeleteObject Function Shared Public
Function End

<("DllImport("gdi32.dll",EntryPoint:="BitBlt>_
As xDest ByVal ،IntPtr As hdcDest ByVal)BitBlt Function Shared Public
As hDest ByVal ،Integer As wDest ByVal ،Integer As yDest ByVal ،Integer
As ySrc ByVal ،Integer As xSrc ByVal ،IntPtr As hdcSource ByVal ،Integer
Boolean As (Integer As RasterOp ByVal ،Integer
Function End

<("DllImport ("gdi32.dll",EntryPoint:="CreateCompatibleBitmap>_
ByVal ،IntPtr As hdc ByVal)CreateCompatibleBitmap Function Shared Public
IntPtr As (Integer As nHeight ByVal ،Integer As nWidth
Function End

<("DllImport ("gdi32.dll",EntryPoint:="CreateCompatibleDC>_
IntPtr As (IntPtr As hdc ByVal)CreateCompatibleDC Function Shared Public
Function End
<("DllImport ("gdi32.dll",EntryPoint:="SelectObject>_

87
As bmp ByVal ،IntPtr As hdc ByVal)SelectObject Function Shared Public
IntPtr As (IntPtr
Function End
End Region#

"Public Constructor" Region#


Public Sub New()
Sub End
End Region#
Class End
Namespace End

‫ط‬,"e ¨$‫ اﺱ‬Class ‫ ال‬I* i*!"‫ف ﺱ‬1# ‫ إذ‬PlatformInvokeUSER32.cs u


: user32 API ‫"!ام ال‬#$ †"%/‫ ا‬O# ‫رة‬1‫ﺹ‬
C #:
using System;
using System.Runtime.InteropServices;
namespace SampleGrabberNET
{
// This class shall keep the User32 APIs being used in our program.
public class PlatformInvokeUSER32
{

#region Class Variables


public const int SM_CXSCREEN=0;
public const int SM_CYSCREEN=1;
#endregion

#region Class Functions


[DllImport("user32.dll", EntryPoint="GetDesktopWindow")]
public static extern IntPtr GetDesktopWindow();

[DllImport("user32.dll",EntryPoint="GetDC")]
public static extern IntPtr GetDC(IntPtr ptr);

[DllImport("user32.dll",EntryPoint="GetSystemMetrics")]
public static extern int GetSystemMetrics(int abc);

[DllImport("user32.dll",EntryPoint="GetWindowDC")]
public static extern IntPtr GetWindowDC(Int32 ptr);

[DllImport("user32.dll",EntryPoint="ReleaseDC")]
public static extern IntPtr ReleaseDC(IntPtr hWnd,IntPtr hDc);

#endregion

#region Public Constructor


public PlatformInvokeUSER32()
{
}
#endregion

88
}
//This structure shall be used to keep the size of the screen.
public struct SIZE
{
public int cx;
public int cy;
}
}
VB.NET:
System Imports
System.Runtime.InteropServices Imports
SampleGrabberNET Namespace
.This class shall keep the User32 APIs being used in our program '
PlatformInvokeUSER32 Class Public

"Class Variables" Region


0=Integer As SM_CXSCREEN Const Public
1=Integer As SM_CYSCREEN Const Public
End Region#

"Class Functions" Region#


<("DllImport("user32.dll", EntryPoint:="GetDesktopWindow>_
IntPtr As ()GetDesktopWindow Function Shared Public
Function End

<("DllImport("user32.dll",EntryPoint:="GetDC>_
IntPtr As (IntPtr As ptr ByVal)GetDC Function Shared Public
Function End

<("DllImport("user32.dll",EntryPoint:="GetSystemMetrics>_
Integer As (Integer As abc ByVal)GetSystemMetrics Function Shared Public
Function End

<("DllImport("user32.dll",EntryPoint:="GetWindowDC>_
IntPtr As (Int32 As ptr ByVal)GetWindowDC Function Shared Public
Function End

<("DllImport("user32.dll",EntryPoint:="ReleaseDC>_
(IntPtr As hDc ByVal ،IntPtr As hWnd ByVal)ReleaseDC Function Shared Public
IntPtr As
Function End

End Region#

"Public Constructor" Region#


Public Sub New()
Sub End
End Region#
Class End
.This structure shall be used to keep the size of the screen'
SIZE Structure Public

89
Integer As cx Public
Integer As cy Public
Structure End
Namespace End

¬‫*— ﺡ‬+&‫ ا‬gh +V&* D%'$ i*!"‫ف ﺱ‬1# g"‫ وا‬CaptureScreen.cs :tu
: PlatformInvokeUSER32 Class ‫ وال‬PlatFormInvokeGDI32 Class ‫ ال‬I* D*.";

C #:
using System;
using System.Drawing;

namespace SampleGrabberNET
{
//This class shall keep all the functionality for capturing the desktop.
public class CaptureScreen
{
#region Public Class Functions
public static Bitmap GetDesktopImage()
{
//In size variable we shall keep the size of the screen.
SIZE size;

//Variable to keep the handle to bitmap.


IntPtr hBitmap;
//Here we get the handle to the desktop device context.
IntPtr hDC =
PlatformInvokeUSER32.GetDC(PlatformInvokeUSER32.GetDesktopWindow());
//Here we make a compatible device context in memory for screen device
context.
IntPtr hMemDC = PlatformInvokeGDI32.CreateCompatibleDC(hDC);
//We pass SM_CXSCREEN constant to GetSystemMetrics to get the X
coordinates of screen.
size.cx=PlatformInvokeUSER32.GetSystemMetrics(PlatformInvokeUSER32.SM
_CXSCREEN);
//We pass SM_CYSCREEN constant to GetSystemMetrics to get the Y
coordinates of screen.
size.cy=PlatformInvokeUSER32.GetSystemMetrics(PlatformInvokeUSER32.SM
_CYSCREEN);
//We create a compatible bitmap of screen size using screen device context.
hBitmap = PlatformInvokeGDI32.CreateCompatibleBitmap(hDC, size.cx,
size.cy);
//As hBitmap is IntPtr we can not check it against null. For this purspose
IntPtr.Zero is used.
if (hBitmap!=IntPtr.Zero)
{
//Here we select the compatible bitmap in memory device context and keeps
the reference to Old bitmap.
IntPtr hOld = (IntPtr) PlatformInvokeGDI32.SelectObject(hMemDC, hBitmap);
//We copy the Bitmap to the memory device context.

90
PlatformInvokeGDI32.BitBlt(hMemDC, 0, 0,size.cx,size.cy, hDC, 0, 0,
PlatformInvokeGDI32.SRCCOPY);
//We select the old bitmap back to the memory device context.
PlatformInvokeGDI32.SelectObject(hMemDC, hOld);
//We delete the memory device context.
PlatformInvokeGDI32.DeleteDC(hMemDC);
//We release the screen device context.
PlatformInvokeUSER32.ReleaseDC(PlatformInvokeUSER32.GetDesktopWindo
w(), hDC);//Image is created by Image bitmap handle and stored in local
variable.
Bitmap bmp = System.Drawing.Image.FromHbitmap(hBitmap);
//Release the memory to avoid memory leaks.
PlatformInvokeGDI32.DeleteObject(hBitmap);
//This statement runs the garbage collector manually.
GC.Collect();//Return the bitmap
return bmp;
}//If hBitmap is null return null.
return null;
}
#endregion
}
}

VB.NET:
Imports System
Imports System.Drawing

Namespace SampleGrabberNET
'This class shall keep all the functionality for capturing the desktop.
Public Class CaptureScreen
#Region" Public Class Functions"
Public Shared Function GetDesktopImage ()As Bitmap
'In size variable we shall keep the size of the screen.
Dim size As SIZE

'Variable to keep the handle to bitmap.


Dim hBitmap As IntPtr
'Here we get the handle to the desktop device context.
Dim hDC As IntPtr =
PlatformInvokeUSER32.GetDC(PlatformInvokeUSER32.GetDesktopWindow(()
'Here we make a compatible device context in memory for screen device
context.
Dim hMemDC As IntPtr = PlatformInvokeGDI32.CreateCompatibleDC(hDC(
'We pass SM_CXSCREEN constant to GetSystemMetrics to get the X
coordinates of screen.
size.cx=PlatformInvokeUSER32.GetSystemMetrics(PlatformInvokeUSER32.SM
CXSCREEN( _
'We pass SM_CYSCREEN constant to GetSystemMetrics to get the Y
coordinates of screen.
size.cy=PlatformInvokeUSER32.GetSystemMetrics(PlatformInvokeUSER32.SM
CYSCREEN( _

91
'We create a compatible bitmap of screen size using screen device context.
hBitmap = PlatformInvokeGDI32.CreateCompatibleBitmap(hDC, size.cx,
size.cy(
'As hBitmap is IntPtr we can not check it against null. For this purspose
IntPtr.Zero is used.
If Not hBitmap.Equals(IntPtr.Zero (Then
'Here we select the compatible bitmap in memory device context and keeps
the reference to Old bitmap.
Dim hOld As IntPtr = CType)PlatformInvokeGDI32.SelectObject(hMemDC,
hBitmap), IntPtr(
'We copy the Bitmap to the memory device context.
PlatformInvokeGDI32.BitBlt(hMemDC, 0, 0,size.cx,size.cy, hDC, 0, 0,
PlatformInvokeGDI32.SRCCOPY(
'We select the old bitmap back to the memory device context.
PlatformInvokeGDI32.SelectObject(hMemDC, hOld(
'We delete the memory device context.
PlatformInvokeGDI32.DeleteDC(hMemDC(
' We release the screen device context.
PlatformInvokeUSER32.ReleaseDC(PlatformInvokeUSER32.GetDesktopWindo
w(), hDC' (Image is created by Image bitmap handle and stored in local
variable.
Dim bmp As Bitmap = System.Drawing.Image.FromHbitmap(hBitmap(
'Release the memory to avoid memory leaks.
PlatformInvokeGDI32.DeleteObject(hBitmap(
'This statement runs the garbage collector manually.
GC.Collect' ()Return the bitmap
Return bmp
End If' If hBitmap is null return null.
Return Nothing
End Function
#End Region
End Class
End Namespace

:("‫ ا‬method ‫"† ال‬% ‫ف‬1# ‫رة‬1S‫ ا‬3)‫ ﺡ‬gh 3%‫ ا"ﺡ‬IO"‫وﺡ"< ﺱ‬
C #:
public Bitmap ResizeBitmap( Bitmap b, int nWidth, int nHeight )
{
Bitmap result = new Bitmap( nWidth, nHeight ); using( Graphics g =
Graphics.FromImage( (Image) result ) ) g.DrawImage( b, 0, 0, nWidth,
nHeight );
return result;
}

VB.NET:
Public Function ResizeBitmap(ByVal b As Bitmap, ByVal nWidth As Integer,
ByVal nHeight As Integer) As Bitmap
Dim result As Bitmap = New Bitmap(nWidth, nHeight)
' Using
Dim g As Graphics = Graphics.FromImage(CType(result, Image))
Try

92
g.DrawImage(b, 0, 0, nWidth, nHeight)
Finally
CType(g, IDisposable).Dispose()
End Try
Return result
End Function

: Multicasting ‫ ال‬I* D*." —*+&‫ ا‬gh ("‫ ا‬Namespaces ‫ف ﺱ"!م ال‬1#


C #:
using System.Net;
using System.Net.Sockets;
using System.IO;

VB.NET:
imports System.Net
imports System.Net.Sockets
imports System.IO

Multicast Group ‫ إ< ال‬i#‫"† و إر‬%/‫ ا‬O# ‫رة‬1‫ط ﺹ‬,"e Timer D/.$ ‫م‬1, 3u
: ‫ﺡد‬/‫ا‬
C #:
Bitmap bt = new Bitmap(CaptureScreen.GetDesktopImage());
picScreen.Image = ResizeBitmap(bt, 352, 200 );
MemoryStream ms = new MemoryStream();
picScreen.Image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arrImage = ms.GetBuffer();
ms.Close();
Socket server = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse(textBox1.Text), 5020);
server.SendTo(arrImage,iep);
server.Close();

VB.NET:
Dim bt As Bitmap = New Bitmap(CaptureScreen.GetDesktopImage)
picScreen.Image = ResizeBitmap(bt, 352, 200)
Dim ms As MemoryStream = New MemoryStream
picScreen.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
Dim arrImage As Byte() = ms.GetBuffer
ms.Close
Dim server As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Parse(textBox1.Text),
5020)
server.SendTo(arrImage, iep)
server.Close

93
:Full/Half Duplex Multicast Text Conferencing System -3

Text Chat Multicast ‫"!ام ال‬#$ ‫"ذ‬#2‫&( ا"ﺡث إ< ا‬-O‫ ا‬IO"‫وﺡ"< ;ﺱ‬
:g"‫ ا‬D%'‫ ا‬gh /‫; وآ‬H New Form ‫'ء‬ $ ‫م‬1, ‫ف‬1# Conference System

:("‫ ا‬Namespaces ‫( ال‬hk $ 39 3u


C #:
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

VB.NET:
imports System.Net
imports System.Net.Sockets
imports System.Text
imports System.Threading

:K (#+‫ ا‬D#+"# ¬‫ل ﺡ‬#‫ر‬s‫( ا‬-/K ‫اء‬+Hs ("‫ ا‬method ‫ف ﺱ"!م ال‬1#
: ‫ﺹ‬S!/‫ ا‬Textbox ‫ ال‬gh (#+‫( ا‬$"‫ آ‬.$ Enter ‫< ال‬-K >‚‫ا‬

C #:
private void msg_KeyPress(object sender,
System.Windows.Forms.KeyPressEventArgs e)
{if(e.KeyChar == '\r'){
try{
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,
ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse(txt_host.Text), 5020);

94
byte[] data = Encoding.ASCII.GetBytes(msg.Text);
server.SendTo(data, iep);
server.Close();
msg.Clear();
msg.Focus();
}
catch(Exception){}}}

VB.NET:
Private Sub msg_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs)
If e.KeyChar = Microsoft.VisualBasic.Chr(13) Then
Try
Dim server As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)
Dim iep As IPEndPoint = New
IPEndPoint(IPAddress.Parse(txt_host.Text), 5020)
Dim data As Byte() = Encoding.ASCII.GetBytes(msg.Text)
server.SendTo(data, iep)
server.Close()
msg.Clear()
msg.Focus()
Catch generatedExceptionVariable0 As Exception
End Try
End If
End Sub

(-&,"‫ﺱ‬/‫( ا‬#+‫ض ا‬+."# ¬‫&ل ﺡ‬,"#e‫( ا‬-/. ("‫د ا‬1t/‫ف ﺱ"!م ا‬1#‫و‬
:‫ﺹ‬S!* list Box gh
C #:
public void server()
{
try
{
UdpClient sock = new UdpClient(5020);
sock.JoinMulticastGroup(IPAddress.Parse(txt_host.Text), 50);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);

byte[] data = sock.Receive(ref iep);


string stringData = Encoding.ASCII.GetString(data, 0, data.Length);
listBox1.Items.Add(iep.Address.ToString() +" :_ "+stringData );
sock.Close();
listBox1.Focus();
msg.Focus();
myth.Abort();
}catch(Exception){}}

95
VB.NET:
Public Sub server()
Try
Dim sock As UdpClient = New UdpClient(5020)
sock.JoinMulticastGroup(IPAddress.Parse(txt_host.Text), 50)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
Dim data As Byte() = sock.Receive(iep)
Dim stringData As String = Encoding.ASCII.GetString(data, 0,
data.Length)
listBox1.Items.Add(iep.Address.ToString + " :_ " + stringData)
sock.Close()
listBox1.Focus()
msg.Focus()
myth.Abort()
Catch generatedExceptionVariable0 As Exception
End Try
End Sub

‫ﻩ ال‬h gK"#‫ وا‬Timer D/.$ 39 ، Threading ‫"!ام ال‬#‫ ا‬B* $e iK"#e‫و‬
:g-; /‫ وآ‬Thread ‫"!ام ال‬#$ (,$‫ اﺱ‬method

C #:
Thread myth;
myth= new Thread (new System.Threading .ThreadStart(server));
myth.Start ();

VB.NET:
Dim myth As Thread
myth = New Thread(New System.Threading.ThreadStart(server))
myth.Start

timer1.Enabled = true ‫"!ام‬#$ ‫ل‬SPe‫< زر ا‬-K >‚‫ ا‬:K Timer ‫ ال‬D' ‫ف‬1#
:g"‫د ا‬1%‫( ا‬hk $ 39 ‫ل‬SPe‫ء ا‬i‫ زر إ‬gh‫و‬

C #:
timer1.Enabled = false;
txt_host.ReadOnly = false;
msg.Enabled=false;
try
{
Socket server = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse(txt_host.Text), 5020);
byte[] data = Encoding.ASCII.GetBytes("has Left the Room");

server.SendTo(data, iep);
server.Close();
msg.Clear();
msg.Focus();
}
catch(Exception){}

96
VB.NET:
timer1.Enabled = False
txt_host.ReadOnly = False
msg.Enabled = False
Try
Dim server As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)
Dim iep As IPEndPoint = New IPEndPoint(IPAddress.Parse(txt_host.Text),
5020)
Dim data As Byte() = Encoding.ASCII.GetBytes("has Left the Room")
server.SendTo(data, iep)
server.Close
msg.Clear
msg.Focus
Catch generatedExceptionVariable0 As Exception
End Try

97
Dot Net Networks & TCP/IP Programming

Chapter 5
Application Layer Programming

Application Layer Programming

A. DNS Programming
B. SMTP Programming
C. POP3 Programming
D. HTTP Programming
E. Web Services & XML Programming
F. FTP Programming

98
\>‫\ ا[ ا>
] ا‬

: DNS Programming :5.1

‫ت‬%&'‫ وا‬+"s‫ ا‬gh ‫ﺱ"!م‬P g"‫ ا!*ت ا‬3‫ أه‬B* ‫ واﺡة‬DNS (*j +&".P
<‫ إ‬Domain Name ‫( ال‬/H+P (-/.$ ‫م‬,$ DNS (T„‫ و‬+S"!P‫ و‬،‫م‬K D%'$
DNS ‫ودات‬w* B* ‫ا‬H ‫ة‬+&‫( آ‬K1/)* ‫ل‬oj B* C‫ ذ‬3";‫ﺱ و‬%.‫ وإ< ا‬B* Domain IP
(-/.‫‰ ا‬7‫&أ ه‬P ، ((:.* ‫ة‬+"h D‫ آ‬i$ (‫ة ا&ت ا!ﺹ‬K9 ¬;‫"ﺡ‬$ ‫م‬1,P g"‫) وا‬
Domain Name ‫ل‬j‫د‬ $ C‫ وذ‬Client B ‫ل‬$ ‫ ا!ص‬Domain ‫† ال‬-O$ Client A‫م ال‬,$
(‫ة ا&ت ا!ﺹ‬K9 gh ‫ﺱﻩ‬T ‹;+."$ Client B ‫م ال‬9 ,&‫ *ﺱ‬3P ¬‫ ﺡ‬- ‫ﻩ‬$ ‫ا!ص‬
‫ ال‬B;‫و‬:K <-K ‫ي‬1"‫ﺡ‬P ‫ت‬$ ‫ة‬K9 <-K Client D‫ي آ‬1"‫ ;ﺡ‬/‫ آ‬- DNS Server ‫ب‬
Domain ‫ان‬1:K <-K i-j‫ا‬$ ¬‫&ﺡ‬$ ‫م‬1,; ¬‫ ﺡ‬local DNS ‫ل‬$ </‫ﺱ‬P‫ و‬Domains
DNS Server ‫ ال‬B* B*‫ان او‬1:K †-O$ ‫م‬1,; ‰); 3 ‫ذا‬ h Domain Name ‫ل‬oj B*
B;w!"$ ‰‫ور‬$ ‫م‬1,;‫ و‬Client ‫ان إ< ال‬1:.‫ل ا‬#‫ر‬ $ DNS Server ‫م ال‬1,; ‰‫ إ;)د‬.$‫و‬
:g"‫ ا‬D%'‫ إ< ا‬+^‫ ا‬، ‫ﻩ‬$ ‫ ا!ص‬Local DNS gh ‫ان‬1:.‫ا‬

g"‫ وا‬System.Net Name Space ‫"!ام‬#$ DNS I* D*."‫ ا‬::%/;  ‫ اوت‬gh
‫ ا!ﺹ( ب‬Methods ‫ ال‬D‫< آ‬-K ‫ي‬1"‫ﺡ‬P g"‫ وا‬DNS Classes ‫ ال‬I/H <-K ‫ي‬1"‫ﺡ‬P
+d ‫ و‬Synchronous Methods B*‫ا‬w"* B/‫ﺱ‬9 <‫دس إ‬1t/‫‰ ا‬7‫ ه‬3‫ﺱ‬,P‫ و‬DNS
:g-; /‫ آ‬g‫ وه‬Asynchronous Methods B*‫ا‬w"*

: g‫ وه‬Synchronous Methods (:*‫ا‬w"/‫دس ا‬1t/‫ ا‬e‫أو‬


String (/9 ‫د‬1t/‫‰ ا‬7‫ ه‬IH+P‫ و‬#1i‫ ا‬3#‫† ا‬-) ‫ﺱ"!م‬P g"‫ وا‬GetHostName
B%/;‫ات و‬+"*‫را‬$ ‫د أي‬1t/‫‰ ا‬7‫ ه‬7jGP e‫ و‬Computer Name ‫< ال‬-K ‫ي‬1"‫ﺡ‬P
: g-; /‫ آ‬i*‫"!ا‬#‫ا‬
C #:
string hostname = Dns.GetHostName();

VB.NET:
Private hostname As String = Dns.GetHostName

99
:g-; /‫ آ‬i:* D‫ﺱ"!م آ‬P‫ و‬GetHostByAddress ‫د‬1t/‫ و ا‬GetHostByName ‫د‬1t/‫ا‬

C #:
IPHostEntry host_ip = Dns.GetHostByName(Computer_Name); // ‫ان‬1:.‫† ا‬-)
3#e‫"!ام ا‬#$
IPHostEntry host_name = Dns.GetHostByAddress(IP_Address); // 3#e‫† ا‬-)
‫ان‬1:.‫"!ام ا‬#$

VB.NET:
Private host_ip As IPHostEntry = Dns.GetHostByName(Computer_Name)
Private host_name As IPHostEntry = Dns.GetHostByAddress(IP_Address)

i -#‫ إذا أر‬Host Name IH+P ¬‫ ﺡ‬Overloaded Method g‫ وه‬Resolve ‫د‬1t/‫ا‬
IPHostEntry ‫ ال‬gh Host Name i -#‫ إذا أر‬Host Address IH+P‫ و‬IP Address
. (,$‫دس اﺱ‬1t/‫"!ام ا‬#‫ ا‬BK i*‫"!ا‬#‫‹ ا‬-"!; e‫و‬
: i*‫"!ا‬#‫( ا‬,;+m B&; ‫ل‬t/‫ا ا‬7‫وه‬

C #:
using System;
using System.Net;

class FMO_DNS
{
public static void Main()
{
IPHostEntry IPHost = Dns.Resolve("www.yahoo.com"); // ;+ ‫ي‬7‫ ا‬B*‫او‬
‫ﻩ‬$ ‫ ا!ص‬g$ ‫ي‬2‫( ا‬h+.*
Console.WriteLine(IPHost.HostName); // D*%$ B*‫ او‬3#‫† ا‬-H

IPAddress[] addr = IPHost.AddressList; // (h1TS* gh B;‫و‬:.‫( ا‬/9 Ik‫و‬

for(int i= 0; i < addr.Length ; i++) // (h1TS/‫ ا‬+‫ﺹ‬:K (K&m


{Console.WriteLine(addr[i]);}}}
VB.NET:
Imports System
Imports System.Net

Class FMO_DNS

Public Shared Sub Main()


Dim IPHost As IPHostEntry = Dns.Resolve("www.yahoo.com")
Console.WriteLine(IPHost.HostName)
Dim addr As IPAddress() = IPHost.AddressList
Dim i As Integer = 0
While i < addr.Length
Console.WriteLine(addr(i))
System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)
End While
End Sub
End Class
0

100
: Asynchronous Methods (:*‫ا‬w"/‫ ا‬+d ‫دس‬1t/‫ ا‬u
: i-K (-t*2‫ ا‬B*‫ و‬End ‫ أو‬Begin (/-%$ ‫دة‬K ‫&أ‬P‫و‬
EndResolve ‫ و‬EndGetHostByName ‫ و‬BeginResolve ‫ و‬BeginGetHostByName
‫ط‬+"'; e ‫ن اﻩ‬1%$ ‹-"!P i:% (:*‫ا‬w"/‫دس ا‬1t/‫ ا‬gh ‫ اﺡل‬1‫ ه‬/‫ آ‬i-/K (.&m
(t‫ة ا‬1O!‫ل إ< ا‬,"Á$ /‫ﺱ‬P e B*‫ا‬w"/‫ ا‬B‫ ﺡ‬gh —*+&‫ ا‬D/K ‫ل‬/‫آ‬s ‫ه‬7T:P
‫ر*ﺱ‬1T;+&‫‡ ا‬T!$ («‫‰ اﺱ‬7‫ﺱ&† ه‬P 9‫ و‬i-/K ‫ء‬i"‫ ﺡ( ا‬gh e‫*— إ‬+&‫ ا‬gh
/‫ﺱ"!م آ‬P‫( و‬:*‫ا‬w"* +‫( ا‬,;+O‫"!ام ا‬#$ S:; C7 —*+&‫ ا‬gh ‫م‬K D%'$
Begin___ : g-;
public static IAsyncResult BeginResolve(string hostname,
AsyncCallback requestCallback, object stateObject)

‫ﻩ ال‬h ‫ف‬+.; gt‫ ا‬+"*‫ول و ا&رو‬2‫ ا‬+"*‫ ا&رو‬gh 3 #1i‫ ا‬Ik‫ و‬3"; ¬‫ﺡ‬
: g-; /‫ آ‬End____ ‫ و;ﺱ"!م‬، delegate e‫ت إ‬oj* +;+/"$ C /‫ﺱ‬P‫ و‬delegate

public static IPHostEntry EndResolve(IasyncResult ar)

¬‫( ﺡ‬%&'‫< ا‬-K ‫دة‬1H1/‫ ا‬IP’s ‫ ال‬I/H †-)$ ‫م‬1,; >‫ﺱ‬$ ‫ و‬D*V ‫ل‬t* :‫وه‬
(‫ل ا!ﺹ‬oj B* ProcessStartInfo B* host names ‫† ال‬-H <-K D/.;
‫د‬1t/‫ل ا‬oj B* host name <‫ﻩ إ‬-;1‫ﺡ‬P 3"; ¬‫ ﺡ‬StandardOutput
D;1‫ﺡ‬P 3"; 3u Collicaion gh i:;w!P 3u GetMachineNamesFromProcessOutput
‫"!ام ال‬#‫ ا‬3"; .&m .. Dns.Resolve ‫د‬1t/‫ل ا‬oj B* B;‫و‬:K <‫ء إ‬/#2‫ا‬
: ‫ل‬t/‫ ا‬1‫ا ه‬7‫ وه‬ProcessStartInfo ‫ل‬$ ‫ ا!ص‬collection ‫اءة ال‬+, StreamReader

C #:
using System;
using System.IO;
using System.Diagnostics;
using System.Net;
using System.Collections.Specialized;

namespace NetworkIPs
{
public class Names

{
public StringCollection GetNames()

{
ProcessStartInfo _startInfo = new ProcessStartInfo("net","view");
_startInfo.CreateNoWindow = true;
_startInfo.UseShellExecute = false;
_startInfo.RedirectStandardOutput = true;
Process _process = Process.Start(_startInfo);
StreamReader _reader = _process.StandardOutput;
StringCollection _machineNames =
GetMachineNamesFromProcessOutput(_reader.ReadToEnd());
StringCollection _machineIPs = new StringCollection();
foreach(string machine in _machineNames)
{
_machineIPs.Add(IPAddresses(machine));
}

101
return _machineIPs;
}
private static string IPAddresses(string server)
{
try
{
System.Text.ASCIIEncoding ASCII = new System.Text.ASCIIEncoding();
// Get server related information.
IPHostEntry heserver = Dns.Resolve(server);
//assumin the machine has only one IP address
return heserver.AddressList[0].ToString();
}
catch
{
return "Address Retrieval error for " + server;
}
}
//string manipulations
private StringCollection
GetMachineNamesFromProcessOutput(string processOutput)
{
string _allMachines = processOutput.Substring( processOutput.IndexOf("\\"));
StringCollection _machines= new StringCollection();
while(_allMachines.IndexOf("\\") != -1 )
{
_machines.Add(_allMachines.Substring(_allMachines.IndexOf("\\"),
_allMachines.IndexOf(" ",_allMachines.IndexOf("\\")) -
_allMachines.IndexOf("\\")).Replace("\\",String.Empty));
_allMachines = _allMachines.Substring(_allMachines.IndexOf("
",_allMachines.IndexOf("\\") + 1));
}
return _machines;
}
}

public class Runner


{
static void Main()
{
Names _names = new Names();
StringCollection names = _names.GetNames();
foreach(string name in names)
Console.WriteLine(name);
Console.ReadLine();
}
}

102
VB.NET:
Imports System
Imports System.IO
Imports System.Diagnostics
Imports System.Net
Imports System.Collections.Specialized

Public Class Names

Public Function GetNames() As StringCollection

Dim _startInfo As ProcessStartInfo = New ProcessStartInfo("net",


"view")
_startInfo.CreateNoWindow = True
_startInfo.UseShellExecute = False
_startInfo.RedirectStandardOutput = True
Dim _process As Process = Process.Start(_startInfo)
Dim _reader As StreamReader = _process.StandardOutput
Dim _machineNames As StringCollection =
GetMachineNamesFromProcessOutput(_reader.ReadToEnd())
Dim _machineIPs As StringCollection = New StringCollection
For Each machine As String In _machineNames
_machineIPs.Add(IPAddresses(machine))
Next machine
Return _machineIPs
End Function
Private Shared Function IPAddresses(ByVal server As String) As String
Try
Dim ASCII As System.Text.ASCIIEncoding = New
System.Text.ASCIIEncoding
' Get server related information.
Dim heserver As IPHostEntry = Dns.Resolve(server)
'assumin the machine has only one IP address
Return heserver.AddressList(0).ToString()
Catch
Return "Address Retrieval error for " & server
End Try
End Function
'string manipulations
Private Function GetMachineNamesFromProcessOutput(ByVal
processOutput As String) As StringCollection
Dim _allMachines As String =
processOutput.Substring(processOutput.IndexOf("\"))
Dim _machines As StringCollection = New StringCollection
Do While _allMachines.IndexOf("\") <> -1
_machines.Add(_allMachines.Substring(_allMachines.IndexOf("\"),
_allMachines.IndexOf(" ", _allMachines.IndexOf("\")) -
_allMachines.IndexOf("\")).Replace("\", String.Empty))
_allMachines = _allMachines.Substring(_allMachines.IndexOf(" ",
_allMachines.IndexOf("\") + 1))

103
Loop
Return _machines
End Function
End Class

Public Class Runner


Shared Sub Main()
Dim _names As Names = New Names
Dim names As StringCollection = _names.GetNames()
For Each name As String In names
Console.WriteLine(name)
Next name
Console.ReadLine()
End Sub
End Class

104
SMTP & POP3 Programming :5.2
(/H+P (-/K BK ‫ل‬1«‫ﺱ‬/‫ وا‬DNS ‫ل‬1‫آ‬1P+$ ()*+$ BK ¨$‫ء اﺱ‬w)‫ ا‬gh :u‫ﺡ‬P
g# gh (-/.‫‰ ا‬7i$ ‫م‬,‫( ا‬T‫ آ‬:$‫ﺱ و‬%.$‫ و‬IP <‫ق إ‬O 3#‫ ا‬B* Domain
‫( ال‬,&O ‫ى‬+j2‫ت ا‬e1‫آ‬1P‫و‬+&‫‡ ا‬.$ ()*+$ BK ‫ف "ﺡث‬1# ‫ء‬w)‫ا ا‬7‫ ه‬gh ، ‫رب‬V
;+&‫ ا‬+&K D#+‫ل ا‬#‫ إر‬BK ‫ل‬1«‫ﺱ‬/‫ وا‬SMTP ‫ ال‬:‫ ه‬/‫ وه‬Application Layer
D/K ‫ل‬oj B* ‫ن‬1$w‫( إ< ا‬#+‫ ا‬D‫ﺹ‬1P (-/K BK ‫ل‬1«‫ﺱ‬/‫ وا‬POP3 ‫ و ال‬g‫و‬+"%s‫ا‬
HTTP ‫ ال‬BK ‫ف "ﺡث‬1# ¨‫ﺡ‬o‫ء ا‬w)‫ ا‬gh‫ و‬Mail Server ‫ ال‬B* i Download
‫ اﻩ‬3-.‫ ا‬I* ، Web ‫ ال‬TSP gh g##‫ أ‬D%'$ ‫ي ;ﺱ"!م‬7‫ وا‬Programming
.. (H‫ اﺡ‬:K i‫ﺡ‬+V <-K gPÀ ‫ف‬1# ‫ة‬+t‫ت آ‬e1‫آ‬1P‫و‬+$ H1;

SMTP – Simple Mail Transfer Protocol Programming :‫ء اول‬2 ‫ا‬


;+&‫&ل ا‬,"#‫ل و ا‬#‫ت إر‬-/K (w)"$ ‫م‬1,; Mail Server ‫وف أن ال‬+./‫ ا‬B*
: g"‫ ا‬D%'‫ ا‬gh /‫ آ‬g‫اء وه‬wH‫( أ‬uou <‫ إ‬+"s‫ ا‬+&K g‫و‬+"%s‫ا‬

D‫ﺹ‬1"‫ وا‬Outgoing ‫ل‬#‫ر‬s‫ ا‬BK ‫ل‬1«‫ﺱ‬/‫ وا‬Message Transfer Agent – MTA


D#+- Incoming
B* ‫آ‬G"‫ وا‬filtering ‫ت ال‬-/K BK ‫ل‬1«‫ﺱ‬/‫ و ا‬Message Delivery Agent -MDA
(#+‫ل ا‬1‫وﺹ‬
gh (#+‫ ا‬B;w!P ‫اءة و‬+9 (-/K BK ‫ل‬1«‫ﺱ‬/‫ وا‬Message User Agent -MUA
POP - Post ‫ل‬1‫آ‬1P‫و‬+$ ‫"!ام‬#$ (-/.‫‰ ا‬7‫ ه‬3"P‫ و‬Client D&,"‫ﺱ‬/‫ ى ا‬Database
: g"‫ ا‬D%'‫ إ< ا‬+^‫ ا‬Office Protocol

‫ ال‬gh g##‫ أ‬D%'$ SMTP Simple Mail Transfer Protocol ‫ل ال‬1‫آ‬1P+$ ‫و ;ﺱ"!م‬
. D#+‫ ا‬Incoming D‫ﺹ‬1P‫ و‬Outgoing ‫ل‬#‫ت إر‬-/K ‫ أي‬MTA

105
‫ ا!ص‬Internet Provider ‫ ال‬B* SMTP ‫ ﺡﺱب‬C-/P C‫ أ‬B* ‫آ‬G"‫ ا‬e‫&¨ ;)† أو‬O"
Outlook Express ‫*— ال‬+$ ‫ل‬oj B* C$ ‫ ا!ص‬Account ‫( ال‬$+)P IO"‫ﺱ‬P C$
B* —*+&‫( ا‬$+)P IO"‫ﺱ‬P SMTP ‫ ﺡﺱب‬C-/P e :‫ إذا آ‬Windows ‫ ال‬I* ‫د‬1H1/‫ا‬
Control : B* i"&t"$ C‫ وذ‬IIS ‫;¨ ال‬+m BK Virtual SMTP Server ‫ل إ'ء‬oj
gh /‫ آ‬SMTP ‫ وال‬IIS ‫ ال‬B* D‫ آ‬D.TP B* ‫آ‬GP Panel >> Add/Remove Programs
: g"‫ ا‬D%'‫ا‬

: g"‫ ا‬D%'‫ ا‬gh /‫ آ‬IIS ‫ ال‬B* Server‫اد ال‬K‫ إ‬3u

Name Space ‫ل‬oj B* SMTP ‫ل ال‬1‫آ‬1P‫و‬+$ ‫"!ام‬#‫ اوت  ا‬3KP


‫ ﺱ"!م‬ioj B* g"‫ وا‬SmtpMail ‫س‬o%‫< ا‬-K ‫ي‬1"‫ﺡ‬P ‫ و‬System.Web.Mail
‫ﺹ‬S!/‫ ا‬Port‫ ال‬1‫ وه‬25 Port‫ ال‬+&K (#+‫ل ا‬#‫ر‬s ‫ﺱ"!م‬P g"‫ وا‬Send ‫د‬1t/‫ا‬
‫ة‬K 7jGP ¬‫ " ﺡ‬overloaded Method " Send ‫د‬1t/‫ ا‬+&".P ‫ و‬SMTP ‫ل‬1‫آ‬1P‫و‬+&
gk‫ا‬+"h‫ ا‬D%'$‫ و‬، ‫ات‬+"*‫را‬$ (.$‫ واﺡ إ< أر‬+"*‫ا‬+$ I* i*‫"!ا‬#‫ ا‬C%* $ ‫ل إذ‬%V‫أ‬
: ("‫ات ا‬+"*‫ا‬+&‫ﺱ"!م ا‬
SmtpMail.Send(string from, string to, string subject, string body)

106
‫ إﻩ و‬D#+/‫ان ا‬1:K ‫ﻩ‬h Ik1; gt‫ وا‬D#+/‫ان ا‬1:K ‫ﻩ‬h Ik1; ‫ول‬2‫ ا‬+"*‫ا‬+&‫ا‬
. (#+‫ﺹ ا‬: I$‫ا‬+‫( وا‬#+‫ان ا‬1:. ¬t‫ ا‬+"*‫ا‬+&‫ا‬

D%'‫ ا‬gh /‫ آ‬New Form ‫'ء‬ $ 39 g‫و‬+"%s‫; ا‬+&‫ل ا‬#‫ر‬ $ ‫م‬1,; —*+$ D/.‫و‬
:g"‫ا‬

‫دراج‬ $ 39 .Mail C; +i^P 3 ‫ ) إذا‬، System.Web.Mail Name Space (hk $ 39 3u


: g"‫د ا‬1%‫( ا‬$"%$ 39 3u ( References ‫ إ< ال‬System.Web Name Space

—*+&‫ا;( ا‬$ gh ‫ا‬7‫ ه‬Name Space (hk‫ﺱ< إ‬:P e


C #:
using System.Web.Mail;

VB.NET:
imports System.Web.Mail;

‫ل‬#‫ر‬s‫ زر ا‬gh ‫ا‬7‫د ه‬1%‫( ا‬$"‫ آ‬3u


C #:
try
{
string from = textBox1.Text;
string to = textBox2.Text;
string subject = textBox3.Text;
string body = textBox4.Text;
SmtpMail.SmtpServer = textBox5.Text;
SmtpMail.Send(from, to, subject, body);
}
catch (Exception ex) {MessageBox.Show(ex.Message);}

VB.NET:
Try
Dim from As String = textBox1.Text
Dim to As String = textBox2.Text
Dim subject As String = textBox3.Text
Dim body As String = textBox4.Text
SmtpMail.SmtpServer = textBox5.Text

107
SmtpMail.Send(from, to, subject, body)
Catch ex As Exception
Msgbox(ex.Message)
End Try
: ‫*‹> ه* ’ﺩا‬
+‫ ذآ‬/‫ آ‬IIS ‫ ال‬B* SMTP ‫ ال‬D.TP B* ‫آ‬G"‫ ;)† ا‬B‫آ‬e ،H D%'$ D/.; ‫د‬1%‫ا ا‬7‫ه‬
SMTP gh ,&‫ﻩ *ﺱ‬T;+.P 3P ‫ي‬7‫ )وا‬SMTP ‫ ا!ص ب ال‬IP Ik1$ 39‫¨ و‬$‫ اﺱ‬gh
SMTP Server ‫ ال‬B* ‚;‫آ أ‬G"‫ ;)† ا‬، SMTP Server Textbox ‫ل‬$( Virtual Server
CDO2 - Microsoft Collaboration Data Objects (&"%/‫"!ام ا‬#‫ ا‬3K; C;
<‫ل إ‬1‫ﺹ‬1‫ ا‬IO"‫ ;ﺱ‬e ‫ﻩ‬G$ ‫ك‬+&!; Exception <-K DS‫ﺡ‬P ‫ف‬1# e‫ وإ‬Version 2
D/.P‫ و‬Windows 2000 ‫ و‬Windows XP I* i*!"#‫ ا‬3"; ‫دة‬.‫ ا‬gh ، CDO2 Object
Microsoft Exchange I* ‫ أو‬SMTP Virtual Server ‫& ال‬tP :K gk‫ا‬+"h‫ ا‬D%'$
<-K DS‫ﺡ‬P ‫ف‬1‫ﺱ‬h 5.5 ‫ أو‬Exchange Version 5 ‫ﺱ"!م‬P :‫ أ* إذا آ‬Server2003
. +‫آ‬7‫¨ ا‬$‫ اﺱ‬Exception ‫ال‬

SMTP Advanced Programming :‫م‬,P +t‫آ‬2‫ء ا‬w)‫ا‬


gh‫ و‬، CDO2 ‫"!ام‬#$ SMTP +&K D#‫ل ر‬#‫ر‬s >‫ﺱ‬$ ‫ل‬t* ¨$‫ل اﺱ‬t/‫ ا‬+&".;
HTML Format ‫"!ام ال‬#‫ ا‬3"; Outlook ‫*— ال‬+$ Dt* —*‫ا‬+$ ‫ إ'ء‬:K ‫دة‬.‫ا‬
;+&‫&ل ا‬,"#‫ل و ا‬#‫ر‬s ‫رات‬j ‫ة‬K CO.; .&m‫ت و‬,‫ﺡ‬-* ‫ل‬#‫( إر‬%*‫ إ‬e‫( إ‬hks$
—*+$ ‫'ء‬ $ ‫م‬1, ‫ف‬1# :‫ وه‬... POP3 ‫ أو ال‬HTTP ‫"!ام ال‬#$ D‫ ه‬g‫و‬+"%s‫ا‬
(&‫ﺱ‬:$ POP3 ‫ و‬SMTP ‫"!ام ال‬#$ g‫و‬+"%s‫; ا‬+&‫&ل ا‬,"#‫ل وا‬#‫ر‬ $ ‫م‬1,; >‫ﺱ‬$
‫ أو أن‬C$ ‫ ا!ص‬ISP ‫ ال‬B* POP3 ‫ ﺡﺱب‬C; +h1"; ‫)† أن‬h POP3 ‫"!ام ال‬#e
‫ﺡ¬ ;ﺱ"!م‬$ ‰‫اد‬K‫زك وإ‬iH <-K Microsoft Exchange Server2003 &t"$ ‫م‬1,P
‫ز و‬i)‫< ا‬-K &t* Domain Controller ‫د‬1H1 ‫ﺡ"ج‬P ‫ف‬1# ‫ه‬:K ‫ إذ‬POP3 ‫ال‬
.‫ﻩ‬-K Active Directory‫& ال‬tP <‫( إ‬hks$ Windows 2003 Server
Name Space ‫ل‬oj B* C‫اص وذ‬1!‫‰ ا‬7‫"!ام ه‬#e ‫"ز‬/* 3K‫* اوت  د‬9
‫ و‬HTML Format ‫ ال‬3K MailMessage ‫س‬o%‫"!ام ا‬#$‫ و‬System.Web.Mail
‫*)( ال‬+& B‫آ‬e‫( و‬#+‫ ا‬I* ‫ت‬,‫ﺡ‬-* ‫ل‬#‫( إر‬%*‫ إ‬3K MailAttachment ‫س‬o%‫ا‬
‫ و‬System.Net ‫ و‬System.Net.Sockets Name Space ‫"!ام‬#‫م ا‬w-; POP3
‫د‬1H‫ﺡﺹ و‬TP (-/.$ ‫م‬,- Server‫ ال‬I* ‫ص‬j Session D/K 3"; ¬‫ ﺡ‬System.IO
(H‫ ﺡﺱ† اﺡ‬Treelist ‫ أو‬List Box gh i"«&."$ ‫م‬1,; ‫ده‬1H‫ ﺡ( و‬gh‫;ة و‬H D#‫ر‬
Mail Server ‫ ال‬B* (#+ Download D/.$ Client ‫م ال‬1,; ‫< إﺡاه‬-K >‚‫ ا‬:K‫و‬
MailMessage ‫س‬o%‫ ا‬B* Object 7jG$ 39 Advanced SMTP eMail Sender D/.‫و‬
: g-; /‫آ‬
C #:
using System.Web.Mail;

try
{
MailMessage mm = new MailMessage();

¨$‫ اﺱ‬gh /‫ وآ‬g"‫د ا‬1%‫( ا‬hk‫ إ‬3u


mm.From = textBox1.Text;
mm.To = textBox2.Text;
// mm.Cc = (H‫‰ ﺡﺱ† اﺡ‬7‫!ﺹ ه‬V B* +t‫آ‬2 ‫ل‬#‫ر‬s‫ ا‬B* C:%/; ‫ﺡ¶ اﻩ‬e
// mm.Bcc =
mm.Subject = textBox3.Text;
mm.Headers.Add("Reply-To", "fadi822000@yahoo.com"); // ‫ت‬hk‫ أي إ‬Ik1
(#+‫ ا‬I* ‫;ه‬+P
mm.Headers.Add("Comments", "This is a test HTML message");
mm.Priority = MailPriority.High; // (#+‫( ا‬/‫رات أه‬j Ik‫ و‬C:%/;

108
mm.BodyFormat = MailFormat.Html; // ‫ﺱ"!م‬/‫ر*ت ا‬1T‫ع ا‬1
mm.Body = "<html><body><h1>" + textBox4.Text + "</h1></html>";
SmtpMail.Send(mm);
}
catch (Exception ex) {MessageBox.Show(ex.Message);}

VB.NET:
imports System.Web.Mail;

Try
Dim mm As MailMessage = New MailMessage
mm.From = textBox1.Text
mm.To = textBox2.Text
mm.Subject = textBox3.Text
mm.Headers.Add("Reply-To", "fadi822000@yahoo.com")
mm.Headers.Add("Comments", "This is a test HTML message")
mm.Priority = MailPriority.High
mm.BodyFormat = MailFormat.Html
mm.Body = "<html><body><h1>" + textBox4.Text + "</h1></html>"
SmtpMail.Send(mm)
Catch ex As Exception
Msgbox(ex.Message)
End Try

3)‫ن أو ﺡ‬1 ‫ أي‬Ik‫ و‬B* C:%/; ‫ا‬7‫ وه‬HTML ‫د ال‬1‫( ;ﺱ"!م آ‬#+‫ ا‬3‫ﺱ‬H ‫ﺡ¶ أن‬e
‫ف‬+." ‫"ى‬:/$ HTML ‫ ال‬3‫ﺱ‬9 IH‫ )را‬HTML ‫"!ام ال‬#$ ‫ﻩ‬-/K B%/; ‫ء‬gV ‫أو أي‬
†); ‫ت‬,‫ﺡ‬-* ‫ل‬#‫< إر‬-K ‫در‬9 —*+&‫ ا‬D.)‫ و‬، ((.‫ا‬+‫"( ا‬$+%‫( اﺱ‬-‫‰ ا‬7‫< ه‬-K
: ‫د‬1%$ g-; /‫ﻩ وآ‬h ‹-/‫ ا‬3#‫ وإدراج ا‬MailAttachment ‫س‬o%‫"!ام ا‬#‫ا‬
C #:
MailAttachment myattach =
new MailAttachment("Your_Attached_File_path.extension",
MailEncoding.Base64);

Design ‫( ال‬-/K .&m ، D*‫ آ‬D%'$ SMTP ‫*— ال‬+$ D/K B* :i"‫ ا‬9 :‫وه‬
.—*+&/‫ة ا‬+&j‫< ﺡﺱ† ذوق وذآء و‬-K /".P ‫ه‬+d‫و‬

VB.NET:
Dim myattach As MailAttachment = New
MailAttachment("Your_Attached_File_path.extension", MailEncoding.Base64)

109
POP3- Post Office Protocol Version 3 Programming : k

MUA - Mail ‫ء ال‬wH gh D/.; ‫ي‬7‫ وا‬POP3 ‫ل ال‬1‫آ‬1P+$ (T„‫ن و‬ h ,$# :u‫ﺡ‬P /‫آ‬
BK ‫ل‬1«‫ﺱ‬/‫ﻩ ا‬1‫ آ‬gh B/%P TCP ‫ل ال‬1‫آ‬1P+$ B/k 110 Port <-K User Agent
Mail ‫ ال‬B* i Download D/K ‫ل‬oj B* Client ‫ن‬1$w‫( إ< ا‬#+‫ ا‬D‫ﺹ‬1P (-/K
Client ‫ز ال‬iH gh ##‫د أ‬1H1/‫ وا‬Mail Folder ‫ ال‬gh D#+‫¶ ا‬T‫ﺡ‬P ¬‫ ﺡ‬Server
:g"‫ ا‬D%'‫ إ< ا‬+^‫أ‬

‫ﻩ‬oj B/h Interactive Mail Access Protocol – IMAP ‫ل‬1‫آ‬1P+$ POP3 D D‫ ا&ا‬B*‫و‬
‫ وﺱ‬Mail server ‫ ال‬gh B‫آ‬e‫ﻩ و‬$ (‫ﺹ‬j Mail Folder ‫ﺱ"!م إ'ء‬/‫ ا‬IO"‫;ﺱ‬
‫اءة‬+9 ‫ إذ أن‬91‫ﺱ ا‬T:$ ‫ﻩ‬P«#‫ و‬IMAP ‫ات ال‬w* B* ‰7‫ ه‬+&".P‫ن و‬1$w‫ز ا‬iH gh
Client B* +t‫ أآ‬B* iP‫اء‬+9 IO"‫ﺱ‬P ¬‫ ﺡ‬Server ‫ل ال‬oj B* ‫ة‬+V&* 3"P (#+‫ا‬
3)‫ﺡ‬$ Mail Server Administrator D#+‫دم ا‬j +;* 3%‫ﺡ‬P g‫ﻩ ه‬h (-%'/‫ ا‬B‫آ‬e‫و‬
: g"‫ ا‬D%'‫ إ< ا‬+^‫ *ﺡودة أ‬i".# ‫دة‬.‫ ا‬gh ‫ن‬1%P ‫ إذ‬Mail Folder ‫ال‬

¨,‫ ا"ﺡ‬.$ ‫ﻩ‬P‫اء‬+9 3";‫ و‬Mail Server B/k I,; Mail Folder ‫ﺡ¶ أن ال‬e
B/%P ‫"ﻩ‬-%'* ‫ن‬ h :-9 /‫ آ‬B‫آ‬e ‫ور‬+/‫( ا‬/-‫ﺱ"!م وآ‬/‫ ا‬3#‫ ا‬B* Authentication
‫ﻩ‬1‫ آ‬POP3 ‫"!ام ال‬#‫ة ا‬+&%‫آت ا‬+' S:; ‫ا‬7 Mail Folder ‫( ال‬.# (;‫ *ﺡود‬gh
Mail Server ‫ ل‬Dj‫ د‬e‫ و‬Client ‫ ال‬1‫( ه‬.‫ اﺱ‬gh 3%‫ي ;"ﺡ‬7h (.‫ *ﺡود اﺱ‬+d
.i$ Administrator

+*2‫م ا‬w-; ‫*)"ﻩ إذ‬+&$ ‫ف &أ‬1# D#+‫اءة ا‬+9 (-/. POP3 ‫د ال‬/"K‫ر ا‬+9 :‫ أ‬/$‫و‬
3"; ¬‫ ﺡ‬System.IO ‫ و‬System.Net ‫ و‬System.Net.Sockets Name Space ‫"!ام‬#‫ا‬
‫د‬1H‫ﺡﺹ و‬TP (-/.$ ‫م‬,- Socket ‫"!ام ال‬#$ Server‫ ال‬I* ‫ص‬j Session D/K

110
‫ص‬j Treelist ‫ أو‬List Box gh i:;‫و‬:K («&."$ ‫م‬1,; ‫ده‬1H‫ ﺡ( و‬gh‫;ة و‬H D#‫ر‬
B* (#+ Download D/.$ Client ‫م ال‬1,; ‫< إﺡاه‬-K >‚‫ ا‬:K‫( و‬H‫ﺡﺱ† اﺡ‬
.Textbox gh ik+K 3u Mail Folder ‫ إ< ال‬Mail Server ‫ال‬

: g"‫ ا‬D%'‫ ا‬gh +i^; /‫; آ‬H New Form ‫'ء‬ $ 39 ¨&O"‫و‬

: ("‫ ا‬Name Spaces (hk $ 39 3u


C #:
using System.Net;
using System.Net.Sockets;
using System.IO;

VB.NET:
imports System.Net
imports System.Net.Sockets
imports System.IO

Server‫ ال‬I* Session ‫'ء‬s Stream ‫ وال‬Socket ‫ ال‬I* D*."‫ ا‬3"; ‫ﺡ¶ اﻩ‬e
. POP3 Server ‫ ال‬B* (#+‫اءة ا‬+9‫ و‬TCP ‫ل ال‬1‫آ‬1P+$ ‫"!ام‬#$

– g‫ﺱ‬+‫س ا‬o%‫;‹ ا‬+.P .$ ‫*— )أي‬+&‫ا;( ا‬$ gh ("‫ر;‹ ا‬."‫( ا‬hk $ 39 3u
: (Global Declaration ‫( ال‬,O:* gh
C #:
public TcpClient Server;// ‫ف‬i$ C‫ وذ‬g$ g# g"‫ل ا‬1‫آ‬1P+$ B* %)$‫ق او‬,"V‫ا‬
(‫ﺱ‬-)‫إ'ء ا‬
public NetworkStream NetStrm;// ‫ﺱ"!م‬/‫*ت ا‬1-.* ‫ل‬#‫ر‬s ‫ف ﺱ"!*ﻩ‬1#
public StreamReader RdStrm; // 3 ‫ب‬1&‫ ا‬B* ‫اردة‬1‫*ت ا‬1-./‫اءة ا‬+,Server
public string Data; // D#+‫د ا‬K (h+.* gh i*‫"!ا‬#e
public byte[] szData; // 3 ‫ب‬1&‫ ا‬B* ‫اردة‬1‫ ا&ت ا‬B;w!"Server
public string CRLF = "\r\n";// ..;H +O# D/. —*+&‫ ا‬gh i*‫"!ا‬#e

111
VB.NET:
Public Server As TcpClient
Public NetStrm As NetworkStream
Public RdStrm As StreamReader
Public Data As String
Public szData As Byte()
Public CRLF As String = "" & Microsoft.VisualBasic.Chr(13) & "" &
Microsoft.VisualBasic.Chr(10) & ""

: g"‫د ا‬1%‫( ا‬hk $ 39 Connect Button ‫ ال‬gh


C #:

// create server POP3 with port 110


// ‫ب‬1&‫ ا‬I* B'# ‫'ء‬sServer‫ ال‬+&K Port110 1‫ﺹ وه‬S!/‫ا‬
Server = new TcpClient(POPServ.Text,110);
try
{
// initialization
NetStrm = Server.GetStream();
RdStrm= new StreamReader(Server.GetStream());
Status.Items.Add(RdStrm.ReadLine());

// Login Process
// ‫ب‬1&‫ه إ< ا‬+;+/P‫ور و‬+/‫( ا‬/-‫ﺱ"!م وآ‬/‫ ا‬3#‫ل ا‬j‫إد‬Server
Data = "USER "+ User.Text+CRLF;
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
NetStrm.Write(szData,0,szData.Length);
Status.Items.Add(RdStrm.ReadLine());
Data = "PASS "+ Passw.Text+CRLF;
// ‫ارد ا!ص‬1‫وق ا‬:‫اءة ﺹ‬+9 3"; ‫ور‬+/‫( ا‬/-‫ﺱ"!م وآ‬/‫ ا‬3#‫ ا‬B* ‫آ‬G"‫ ا‬.$
‫ﺱ"!م‬/$
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
NetStrm.Write(szData,0,szData.Length);
Status.Items.Add(RdStrm.ReadLine());

Send STAT command to get information ie: number of mail and size
STAT +*2‫"!ام ا‬#$ POP3 Server gh ‫دة‬1H1/‫ ا‬D#+‫د ا‬K (h+./
Data = "STAT"+CRLF;
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
NetStrm.Write(szData,0,szData.Length);
Status.Items.Add(RdStrm.ReadLine());

: Disconnect Button ‫ إ< ال‬g"‫د ا‬1%‫( ا‬hk $ 39


// Send QUIT command to close session from POP server
Data = "QUIT"+CRLF;
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
NetStrm.Write(szData,0,szData.Length);
Status.Items.Add(RdStrm.ReadLine());
//close connection
NetStrm.Close();
RdStrm.Close();

112
VB.NET:
Server = New TcpClient(POPServ.Text, 110)
NetStrm = Server.GetStream
RdStrm = New StreamReader(Server.GetStream)
Status.Items.Add(RdStrm.ReadLine)
Data = "USER " + User.Text + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray)
NetStrm.Write(szData, 0, szData.Length)
Status.Items.Add(RdStrm.ReadLine)
Data = "PASS " + Passw.Text + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray)
NetStrm.Write(szData, 0, szData.Length)
Status.Items.Add(RdStrm.ReadLine)
Data = "STAT" + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray)
NetStrm.Write(szData, 0, szData.Length)
Status.Items.Add(RdStrm.ReadLine)
Data = "QUIT" + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray)
NetStrm.Write(szData, 0, szData.Length)
Status.Items.Add(RdStrm.ReadLine)
NetStrm.Close
RdStrm.Close

39 ( ‫ة‬+j2‫( ا‬#+‫اءة ا‬+9 3"# gk‫ا‬+"h‫ ا‬D%'$ )‫ارد‬1‫وق ا‬:‫ ﺹ‬B* D#+‫اءة ا‬+,‫و‬
: Read Last Come Email Button ‫ إ< ال‬g"‫د ا‬1%‫( ا‬hk $
C #:
string szTemp;
Message.Clear();
try
{

// retrieve mail with number mail parameter


Data = "RETR 1"+CRLF; // iP‫اء‬+9 ‫اد‬+/‫( ا‬#+‫ ا‬39‫"ﺡ; ر‬

szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
NetStrm.Write(szData,0,szData.Length);
szTemp = RdStrm.ReadLine(); // i"K&m 3"; <"‫ ﺡ‬9a* D%'$ (#+‫ ا‬B;w!P
if(szTemp[0]!='-')
{
while(szTemp!=".")
{
Message.Text += szTemp+CRLF;
szTemp = RdStrm.ReadLine();
}
}
else
{Status.Items.Add(szTemp);}
}
catch(InvalidOperationException err){Status.Items.Add("Error:
"+err.ToString());}

113
VB.NET:
Dim szTemp As String
Message.Clear
Try
Data = "RETR 1" + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray)
NetStrm.Write(szData, 0, szData.Length)
szTemp = RdStrm.ReadLine
If Not (szTemp(0) = "-"C) Then
While Not (szTemp = ".")
Message.Text += szTemp + CRLF
szTemp = RdStrm.ReadLine
End While
Else
Status.Items.Add(szTemp)
End If
Catch err As InvalidOperationException
Status.Items.Add("Error: " + err.ToString)
End Try

>‫ﺱ‬$ ‫ل‬t* ‫ا‬7‫ اوت  وه‬gh ‫*)"ﻩ‬+$‫ و‬3 ‫ب‬1&‫ ا‬D/K (T‫ح آ‬+'$ /9 9 :‫وه‬
¬‫ ﺡ‬h1#‫و‬+%/$ ‫ ا!ص‬Outlook ‫ل‬$ ‫&ﻩ‬V D*‫وع آ‬+'* D/. ‫ﻩ‬:* ‫ ا&ء‬IO"‫ﺱ‬P
e$ ‫اردة‬1‫ ا‬D#+‫ض ا‬+. ‫رر‬1-&‫ إآﺱ‬+"s$ ‫ ا!ص‬DLL ‫‹ ال‬-* ‫"!ام‬#‫ ا‬IO"‫ﺱ‬P
D#+‫ ا‬Ik1 Tree List D/K IO"‫ﺱ‬P /‫ آ‬HTML Code D%V <-K ik+K B*
iP‫اء‬+, ¨$‫د اﺱ‬1%‫ ا‬gh ‫ﻩ‬.k‫ و‬3"; g-‫ﺱ‬-‫ﺱ‬P 39‫( ر‬#‫ ر‬D% ‫ن‬1%; ¬‫اردة ﺡ‬1‫ا‬
، ‫اردة‬1‫ة ا‬+j2‫( ا‬#+‫اءة ا‬+,$ ‫م‬1,; ‫ي‬7‫ وا‬gk‫ا‬+"h‫ ا‬D%'$ 1 39+‫"!* ا‬#‫ﺡ¬ ا‬

114
HTTP – Hyper Text Transfer Protocol Programming :5.3

†-m D‫ﺹ‬1" ‫ﺱ"!م‬/‫ل ا‬1‫آ‬1P+&‫< اﻩ ا‬-K ‫م‬K D%'$ HTTP ‫( ال‬T„‫!ﺹ و‬-"P
‫< ال‬-K ‫د‬+$ web server ‫م ال‬9 3u Server †;1‫ إ< ا‬User Request ‫ﺱ"!م‬/‫ا‬
‫ل ال‬%V‫ أ‬I/H D, IO"‫ﺱ‬P ‫آ‬G"$‫ و‬Server Response ‫< ب‬/‫ي ;ﺱ‬7‫ وا‬Request
‫ إ< ال‬Web Server ‫ ال‬B* .. ‰+d‫ و‬1;h ‫ت و‬1‫رة و ﺹ‬1‫ﺹ وﺹ‬:‫ ا‬B* (Multimedia)
.Byte Stream object ‫"!ام‬#$ Client Application
D%'$ ‫"!ا*ﻩ‬#‫ ا‬g:.; ‫ا‬7‫ وه‬Application Layer ‫< ال‬-K HTTP ‫ل ال‬1‫آ‬1P+$ D/.;
<‫ إ‬+^‫ ا‬DNS,SMTP,POP3,FTP gh ‫ اﺡل‬1‫ ه‬/‫ﺱ"!م آ‬/‫( ا‬iH‫ وا‬B* +V&*
:g"‫ ا‬D%'‫ا‬

Downloading From Web Server : v‫أو‬


WebClient ‫س‬o%‫"!ام ا‬#$  ‫ اوت‬gh Web Server ‫ ال‬I* D*."‫ ا‬IO"‫ﺱ‬
†-m D‫ﺹ‬1" ‫ت‬%*s‫ ا‬I/H : ‫م‬,P ‫ إذ‬System.Net Name Space gh ‫د‬1H1/‫ا‬
WebClient Class ‫ ال‬3KP‫ و‬User Request & Server Response‫ﻩ‬-K ‫د‬+‫ن و ا‬1$w‫ا‬
:g‫ وه‬Web Server ‫ ال‬B* ‫ ا&ت‬D/‫ "ﺡ‬Methods (uou

Byte gh i:;w!P‫ و‬Web Server ‫ ال‬B* ‫† ا&ت‬-H i"T„‫ وو‬DownloadData -1


: ‫ل‬t/‫ آ‬g-; /‫ﺱ"!م آ‬P‫ و‬HTML Code D%V <-K ‫ض‬+.P‫ و‬Array
C #:
using System;
using System.Net;
using System.Text;
class DownloadData_Method
{
public static void Main ()
{
WebClient wc = new WebClient();
byte[] response =
wc.DownloadData("http://www.google.com");
Console.WriteLine(Encoding.ASCII.GetString(response));
}
}

115
VB.NET:
Imports System
Imports System.Net
Imports System.Text

Class DownloadData_Method

Public Shared Sub Main()


Dim wc As WebClient = New WebClient
Dim response As Byte() = wc.DownloadData("http://www.google.com")
Console.WriteLine(Encoding.ASCII.GetString(response))
End Sub
End Class

gh ‫ة‬+V&* i:;w!P‫ و‬Web Server ‫ ال‬B* * ‹-* D, i"T„‫وو‬DownloadFile -2


‹-/‫ ا‬I91* +;+/P ‫ا‬1# C-K * ‫ا إذ‬H ‫"!ام‬#e‫ ا‬Di# 1‫ وه‬Local Computer
: ‫ل‬t/‫ آ‬g-; /‫ﻩ و;ﺱ"!م آ‬h ‹-/‫ ا‬B;w!P ;+P ‫ي‬7‫ن ا‬%/‫وا‬
C #:
using System;
using System.Net;

class DownloadFile_Method
{
public static void Main ()
{
WebClient wc = new WebClient();
string filename = "C:\\ra.zip";

Console.WriteLine("Download in Progress Please Waite...");

wc.DownloadFile("http://www.personalmicrocosms.com/zip/ra.zip", filename);

Console.WriteLine("file downloaded");
}
}

VB.NET:
Imports System
Imports System.Net
Imports System.Text

Class DownloadData_Method

Public Shared Sub Main()


Dim wc As WebClient = New WebClient
Dim response As Byte() = wc.DownloadData("http://www.google.com")
Console.WriteLine(Encoding.ASCII.GetString(response))
End Sub
End Class

116
†-) Server‫ن وال‬1$w‫ ا‬B$ Read Only Stream ‫ إ'ء‬i"T„‫ وو‬OpenRead -3
;+P ‫ي‬7‫ ا‬I91/- URL ‫ ال‬+;+/P .$ Stream Object gh ‫ﻩ‬:;w!P‫ *ﺡد و‬URL B* ‫ت‬$
Stream ‫ ال‬gh (w!/‫ض ا&ت ا‬+K IO"‫ ﺱ‬ReadLine ‫د‬1t/‫"!ام ا‬#$‫ﻩ و‬k+K
. HTML Code D%V <-K Object
. Stream Object ‫;( ال‬i (h+./ Peek ‫د‬1t/‫ﺱ"!م ا‬P : (^‫ﺡ‬o*
C #:
using System;
using System.IO;
using System.Net;

class OpenRead_Method
{
public static void Main ()
{
WebClient wc = new WebClient();
string response;

Stream strm = wc.OpenRead("http://www.google.com");


StreamReader sr = new StreamReader(strm);

while(sr.Peek() > -1)


{
response = sr.ReadLine();
Console.WriteLine(response);
}
sr.Close();
}
}

VB.NET:
Imports System
Imports System.IO
Imports System.Net

Class OpenRead_Method

Public Shared Sub Main()


Dim wc As WebClient = New WebClient
Dim response As String
Dim strm As Stream = wc.OpenRead("http://www.google.com")
Dim sr As StreamReader = New StreamReader(strm)
While sr.Peek > -1
response = sr.ReadLine
Console.WriteLine(response)
End While
sr.Close()
End Sub
End Class

‫ﺱ"!م‬P g"‫ وا‬Properties ‫ ال‬B* (K1/)* <-K WebClient Class ‫ي ال‬1"‫و;ﺡ‬


‫ي ;ﺱ"!م‬7‫ وا‬ResponseHeaders property Dt* Web Host ‫ ال‬BK ‫*ت‬1-.* †-)

117
cash control ‫ع ال‬1‫ و‬Headers ‫د ال‬K Dt* web host ‫ ال‬BK (*‫*ت ه‬1-.* †-)
،(*i‫*ت ا‬1-./‫ ا‬B* ‫ه‬+d‫ﺱ"!م و‬/‫ ا‬Encoding ‫ع ال‬1 ‫ و‬Server ‫ ال‬3#‫وا‬
:‫ل‬t/‫ آ‬g-; /‫و;ﺱ"!م آ‬
C #:
using System;
using System.Net;

class ResponseHeaders_property
{
public static void Main ()
{
WebClient wc = new WebClient();
byte[] response =
wc.DownloadData("http://www.google.com");
WebHeaderCollection whc = wc.ResponseHeaders;
Console.WriteLine("header count = {0}", whc.Count);
for (int i = 0; i < whc.Count; i++)
{
Console.WriteLine(whc.GetKey(i) + " = " + whc.Get(i));
}
}
}

VB.NET:
Imports System
Imports System.Net

Class ResponseHeaders_property

Public Shared Sub Main()


Dim wc As WebClient = New WebClient
Dim response As Byte() = wc.DownloadData("http://www.google.com")
Dim whc As WebHeaderCollection = wc.ResponseHeaders
Console.WriteLine("header count = {0}", whc.Count)
Dim i As Integer = 0
While i < whc.Count
Console.WriteLine(whc.GetKey(i) + " = " + whc.Get(i))
System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)
End While
End Sub
End Class

//Output:
//header count = 6
//Cache-Control = private
//Content-Type = text/html
//Set-Cookie = PREF=ID=6ae22f44980c5d78…
//7JRA; expires=Sun, 17-Jan-2038 19:14:
//Server = GWS/2.1
//Transfer-Encoding = chunked
//Date = Wed, 23 Nov 2005 10:10:58 GMT

118
Uploading to Web Server : k
: g‫ وه‬Web Server ‫ ا&ت إ< ال‬D/‫ "ﺡ‬Methods (.$‫ أر‬WebClient ‫ ال‬3K;
.$ C‫ وذ‬Web Server ‫ إ< ال‬Stream Data ‫ل‬#‫ر‬s ‫ و;ﺱ"!م‬OpenWrite -1
‫ ;)† أن‬.&m Web Page ‫< ال‬-K ‫"ﻩ‬$"‫; آ‬+ ‫ي‬7‫ﺹ ا‬:‫‹ وا‬-/- URL ‫ان ال‬1:K +;+/P
: ‫ل‬t/‫ آ‬g-; /‫ و;ﺱ"!م آ‬C7 ‫ﺡت‬oS‫ ا‬C-/P
C #:
using System;
using System.IO;
using System.Net;
method_class OpenWrite
{
public static void Main ()
{
WebClient wc = new WebClient();
string data = "<h1>Welcome to My Page</h1>";
Stream strm = wc.OpenWrite("C:\\mypage.html");
StreamWriter sw = new StreamWriter(strm);
sw.WriteLine(data);
sw.Close();
strm.Close();
}
}

VB.NET:
Imports System
Imports System.IO
Imports System.Net

Class OpenWrite_method

Public Shared Sub Main()


Dim wc As WebClient = New WebClient
Dim data As String = "<h1>Welcome to My Page</h1>"
Dim strm As Stream = wc.OpenWrite("C:\mypage.html")
Dim sw As StreamWriter = New StreamWriter(strm)
sw.WriteLine(data)
sw.Close()
strm.Close()
End Sub
End Class

119
Web ‫ إ< ال‬Byte ‫ع‬1:‫ ا‬B* (h1TS* ‫;ت‬1"‫ *ﺡ‬D,: ‫ و;ﺱ"!م‬UploadData – 2
‫ر‬1S‫ﺹ ا‬:‫ ا‬Dt* ‫ ا&ت‬B* ‫ع‬1 ‫ أي‬Ih‫ ر‬ioj B* IO"‫ﺱ‬P C‫ ا‬g:.; ‫ا‬7‫ وه‬Server
g-; /‫ و;ﺱ"!م آ‬Byte Array <‫ إ‬i-;1‫ﺡ‬P .$ web server ‫‰ إ< ال‬+d‫ و‬1;T‫ا‬
: ‫ل‬t/‫آ‬

C #:
using System;
using System.Net;
using System.Text;

Method_class UploadData
{
public static void Main ()
{
WebClient wc = new WebClient();
string data = "This is The Text Before Converted it to Byte";
byte[] dataarray = Encoding.ASCII.GetBytes(data);
wc.UploadData("C:\\mydata.txt", dataarray);
}
}

VB.NET:
Imports System
Imports System.Net
Imports System.Text

Class UploadData_Method

Public Shared Sub Main()


Dim wc As WebClient = New WebClient
Dim data As String = "This is The Text Before Converted it to Byte"
Dim dataarray As Byte() = Encoding.ASCII.GetBytes(data)
wc.UploadData("C:\mydata.txt", dataarray)
End Sub
End Class

‫ إ< ال‬Local Computer ‫ ال‬B* ‹-* Ih+ ‫د‬1t/‫‰ ا‬7‫ﺱ"!م ه‬P‫ و‬UploadFile -3
: ‫ل‬t/‫ آ‬g-; /‫ﺱ"!م آ‬P‫ا و‬H ‫"!ام‬#e‫( ا‬O‫ﺱ‬$ g‫ وه‬Web Host
C #:
using System;
using System.Net;

class UploadFile_Method
{
public static void Main ()
{
WebClient wc = new WebClient();
wc.UploadFile("http://www.yoursite.com", "C:\\myfile.html");
}
}

120
VB.NET:
Imports System
Imports System.Net

Class UploadFile_Method

Public Shared Sub Main()


Dim wc As WebClient = New WebClient
wc.UploadFile("http://www.yoursite.com", "C:\myfile.html")
End Sub
End Class

i$ (‫ ا!ﺹ‬values ‫ ا&ت وال‬B* Collection Ih+ ‫ﺱ"!م‬P‫ و‬UploadValues -4


‹;+."‫ و‬Byte Array <‫ إ‬Collection ‫ ال‬D;1‫ﺡ‬P .$ C‫ وذ‬Server †;1‫إ< ا‬
Name Space gh ‫د‬1H1/‫ ا‬NameValueCollection ‫س‬o%‫ ﺱ"!م ا‬Collection
Collection ‫( ال‬hks add ‫د‬1t/‫ﻩ ﺱ"!م ا‬T;+.P .$‫ و‬System.Collections.Specialized
: ‫ل‬t/‫ آ‬g-; /‫ﺱ"!م آ‬P‫ و‬..;H
C #:

using System;
using System.Collections.Specialized;
using System.Net;
using System.Text;

class UploadValues_Method
{

public static void Main ()


{
WebClient wc = new WebClient();
NameValueCollection nvc = new NameValueCollection();
nvc.Add("firstname", "Fadi");
nvc.Add("lastname", "Abdel-qader");
byte[] response =
wc.UploadValues("http://localhost/mypage.aspx", nvc);
Console.WriteLine(Encoding.ASCII.GetString(response));
}
}

VB.NET:
Imports System
Imports System.Collections.Specialized
Imports System.Net
Imports System.Text

Class UploadValues_Method

Public Shared Sub Main()


Dim wc As WebClient = New WebClient
Dim nvc As NameValueCollection = New NameValueCollection
nvc.Add("firstname", "Fadi")

121
nvc.Add("lastname", "Abdel-qader")
Dim response As Byte() =
wc.UploadValues("http://localhost/mypage.aspx", nvc)
Console.WriteLine(Encoding.ASCII.GetString(response))
End Sub
End Class

:HTTP Programming ‫ ' ﺩ*  ال‬3‫< اآ‬7‫ا‬.


‫ا‬: 3k

‫ي‬7‫ وا‬Web Client Applications ‫ت‬,&OP ()*+$ gh ‫اء‬wH2‫ ا‬3‫ أه‬B* ‫ء‬w)‫ا ا‬7‫ ه‬+&".;
‫ و ال‬HttpWebRequest Class ‫ ال‬B* D‫"!ام آ‬#‫ ا‬BK ‫ﻩ‬h ‫ف "ﺡث‬1#
: HttpWebResponse Class

: HttpWebRequest Class ‫ﺩام‬p‫ ا‬-1


g##‫ أ‬D%'$ ‫ﺱ"!م‬P g"‫ وا‬Properties ‫ ال‬B* (K1/)* <-K ‫س‬o%‫ا ا‬7‫ي ه‬1"‫;ﺡ‬
: Dt* ‫'ء‬s Web Client Applications ‫ت ال‬,&OP gh
39‫ ور‬Proxy Server ‫ان ال‬1:K ih ‫ر‬+/ g"‫ وا‬: Web Proxy ‫ﺹ( ال‬j ‫"!ام‬#‫ ا‬-1
‫ أو‬Proxy Server ‹-j B*HTTP Web Requests ‫ ال‬I* D*."‫ ا‬IO"‫ ﺡ"< ﺱ‬Port‫ال‬
: ‫ل‬t/‫ آ‬g-; /‫ آ‬Proxy Server Prosperity ‫;‹ ال‬+.P 3";‫ و‬Firewall
C #:
using System;
using System.Net;

class ProxyServer_Property
{

public static void Main ()


{
HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(
"http://www.google.com");

WebProxy proxysrv = new


WebProxy("http://proxy1.server.net:8080");
hwr.Proxy = proxysrv;
}
}

VB.NET:
Imports System
Imports System.Net

Class ProxyServer_Property

Public Shared Sub Main()


Dim hwr As HttpWebRequest =
CType(WebRequest.Create("http://www.google.com"), HttpWebRequest)
Dim proxysrv As WebProxy = New
WebProxy("http://proxy1.server.net:8080")
hwr.Proxy = proxysrv
End Sub
End Class

122
B* WebProxy Object ‫ف‬+. 3u HttpWebRequest Object ‫ ا&ا;( ال‬gh ‫ف‬+.
IO"‫ ﺱ‬C‫ ذ‬.$‫ و‬Port‫ ال‬39‫ ور‬Proxy Server ‫ان ال‬1:K ‫ ﻩ‬:‫ وﺱ‬webProxy ‫س‬o%‫ا‬
I/H gh ‫دة‬K ‫دة‬1H1* ‫ن‬1%P g"‫ ا‬Proxy (‫"!ام ا!ﺹ‬#$ %)$‫د‰ إ< أي او‬:#‫إ‬
.. HttpWebRequest Objects

‫"!ام ال‬#$ Server †;1‫ت إ< ا‬$ ‫ل‬#‫ر‬s HttpWebrequest ‫"!ام ال‬#‫ ا‬-2
: ‫ل‬t/‫ آ‬g-; /‫ﺱ"!م آ‬P‫ و‬Streams
C #:
HttpWebrequest hwr =
(HttpWebRequest)WebRequest.Create("http://localhost");
Stream strm = hwr.GetRequestStream();
StreamWriter sw = new StreamWriter(strm);
sw.WriteLine(data);

VB.NET:
Dim hwr As HttpWebrequest = CType(WebRequest.Create("http://localhost"),
HttpWebRequest)
Dim strm As Stream = hwr.GetRequestStream
Dim sw As StreamWriter = New StreamWriter(strm)
sw.WriteLine(data)

‫ ﻩ ال‬:‫ وﺱ‬Stream Object ‹;+."$ ‫م‬1, HttpWebRequest Object ‫;‹ ال‬+.P .$
. GetRequestStream ‫د‬1t/‫ل ا‬oj B* Request Stream

:HttpWebResponse Class ‫ﺩام‬p‫ ا‬- 2

‫ إ< ال‬Server †;1‫ ا‬B* ‫ت‬$ ‫ع‬H‫ر‬s HttpWebResponse Object ‫ﺱ"!م ال‬P
‰7i BeginGetResponse ‫د‬1t/‫ و ا‬GetResponse ‫د‬1t/‫ ﺡ¬ ﺱ"!م ا‬Client
BeginGetResponse ‫ى أن‬1# ‫دس‬1t/‫‰ ا‬7‫( ه‬T„‫ و‬gh ‫ق‬+h H1; e‫( و‬-/.‫ا‬
. asynchronous Method +&".P

: g‫ وه‬Properties ‫ ال‬B* ‫د‬K <-K HttpWebResponse Object ‫ي ال‬1"‫;ﺡ‬

Character Set ‫ع ال‬1 ;‫ﺱ"!م "ﺡ‬P‫ و‬: CharacterSet -1


encoding ‫( ال‬-/. ‫ﺱ"!م‬P‫ و‬: ContentEncoding -2
‫د‬+‫ ا‬3)‫( ﺡ‬h+./ ‫ﺱ"!م‬P‫ و‬: ContentLength -3
Respone ‫ع ال‬1 ;‫ "ﺡ‬: ContentType -4
‫رغ‬h Cookie ‹-* ‫ إ'ء‬e‫ ;)† أو‬i*‫ وﺱ"!ا‬Cookies ‫ ال‬I* D*." : Cookies -5
: ‫ل‬t/‫ آ‬g-; /‫ﻩ آ‬T;+.P‫و‬

C #:
HttpWebRequest hwr =
(HttpWebRequest)WebRequest.Create(http://www.amazon.com);
hwr.CookieContainer = new CookieContainer();
: g-; /‫‰ إﻩ آ‬:‫ ﺱ‬3u HTTP Request ‫ ال‬D&9 C‫وذ‬
HttpWebResponse hwrsp = (HttpWebResponse)hwr.GetResponse();
hwrsp.Cookies = hwr.CookieContainer.GetCookies(hwr.RequestUri);

123
VB.NET:
Dim hwr As HttpWebRequest =
CType(WebRequest.Create("http://www.amazon.com"), HttpWebRequest)
hwr.CookieContainer = New CookieContainer

Dim hwrsp As HttpWebResponse = CType(hwr.GetResponse,


HttpWebResponse)
hwrsp.Cookies = hwr.CookieContainer.GetCookies(hwr.RequestUri)

HTTP Headers ‫( ال‬h+./ : Headers -6


D;.P +j‫ أ‬Ú;‫ر‬P‫ و‬9‫ﻩ و‬h IH+; : LastModified -7
HTTP Response ‫ ال‬gh ‫ﺱ"!م‬P g"‫د وا‬1t/‫( ا‬h+./ : Method -8
HTTP Version ‫( ال‬h+./ : ProtocolVersion – 9
Server‫ ا!ص ب‬URL ‫ ال‬: ResponseUri – 10
Server‫ ال‬3#‫( ا‬h+./ : Server – 11
‫ ا*ﺱ"!م‬Coding ‫ع ال‬1 (h+./ : StatusCode – 12
HTTP ‫< ﺡ( ال‬-K ‫ي‬1"‫ ;ﺡ‬Text ‫ع‬H‫ر‬s : StatusDescription – 13

124
Web Services Programming :5.4

web ‫ ال‬B$ DKT"‫( ا‬T‫ﻩ آ‬h :$‫ و‬HTTP ‫*)( ال‬+$ BK ¨$‫ء اﺱ‬w)‫ ا‬gh :u‫ﺡ‬P
(T„‫!ﺹ و‬-"P ،,$# ‫ﻩ‬:K :u‫ﺡ‬P / D/%* ‫ء‬w)‫ا ا‬7‫ ه‬+&".;‫ و‬client ‫ وال‬server
web ‫ل‬$ ‫دة‬1H1/‫ ا‬Methods ‫ ال‬B* ‫دة‬T"#e‫( ا‬%* $ web services ‫"!ام ال‬#‫ا‬
Simple ‫ر ل‬S"j‫ ا‬1‫ وه‬SOAP ‫ل ال‬1‫آ‬1P+$ ‫"!ام‬#$‫ن و‬1$w‫*— ا‬+$ Dj‫ دا‬server
‫ إ< ال‬web Services server ‫ ال‬B* Result ‫ ال‬D, 3"; Object Access Protocol
+&K D,:P ¬‫ ﺡ‬XML - extensible Markup Language ‫ إ< ال‬i-;1‫ﺡ‬P .$ Client
Data ‫ل ال‬1‫ وﺹ‬Di‫ﺱ‬P 1‫"!ا*ﻩ ه‬#‫ ا‬B* ‫ف‬i‫ن وا‬1$w‫ز ا‬iH <‫ إ‬HTTP ‫ل ال‬1‫آ‬1P+$
I/H ‫( إذ أن‬T-"!/‫ وا&«ت ا‬firewalls ‫ل ال‬oj B* Client ‫ إ< ال‬web server ‫ ال‬B*
( ‹-"!P e‫ و‬. 80 Port‫< ال‬-K D/.; ‫ي‬7‫ وا‬HTTP ‫ل ال‬1‫آ‬1P+$ 3KP ‫ت‬%&'‫«ت ا‬$
B* (K1/)* g‫ وه‬HTML ‫ ال‬gh K‫ا‬1,‫ﺱ ا‬T ‫ﺱ"!م‬P ‫ إذ‬HTML ‫ ال‬BK XML ‫ال‬
: i-K ‫ل‬t/‫ وآ‬+&‫و( اآ‬+/$ w/"P B‫آ‬e <> </> ‫ ال‬Dt* Attributes ‫ وال‬Elements ‫ال‬

<myStuff>
<myName>FADI Abdel-qader</myName>
<myTelephone>+962796...</myTelephone>
<myEmail>fadi822000@yahoo.com</myEmail>
<myAge>23</myAge>
<mySex>M</mySex>
</myStuff>

3"; ¬‫ ﺡ‬System.xml Name Spaces ‫"!ام‬#$  ‫ اوت‬gh iK"#‫ ا‬3";‫و‬
: g-; /‫ آ‬XmlDocument Class ‫ ال‬gh ‫د‬1H1/‫ ا‬Load ‫د‬1t/‫"!ام ا‬#$ iP‫اء‬+9

C #:
using System.Xml;
// Then you can Read any XML File as Below:
XmlDocument xDoc = new XmlDocument();
xDoc.Load(@"C:\myinfo.xml");
XmlNodeList name = xDoc.GetElementsByTagName("myName");
XmlNodeList telephone = xDoc.GetElementsByTagName("myTelephone");
XmlNodeList email = xDoc.GetElementsByTagName("myEmail");
XmlNodeList age = xDoc.GetElementsByTagName("myAge");
XmlNodeList sex = xDoc.GetElementsByTagName("mySex");

MessageBox.Show(
"Name: " + name[0].InnerText +"\n"+
"Telephone: " + telephone[0].InnerText +"\n"+
"Email: "+ email[0].InnerText +"\n"+
"Age: "+ age[0].InnerText +"\n"+
"sex: "+ sex[0].InnerText +"\n"

125
VB.NET:
Dim xDoc As XmlDocument = New XmlDocument
xDoc.Load("C:\myinfo.xml")
Dim name As XmlNodeList = xDoc.GetElementsByTagName("myName")
Dim telephone As XmlNodeList =
xDoc.GetElementsByTagName("myTelephone")
Dim email As XmlNodeList = xDoc.GetElementsByTagName("myEmail")
Dim age As XmlNodeList = xDoc.GetElementsByTagName("myAge")
Dim sex As XmlNodeList = xDoc.GetElementsByTagName("mySex")
Msgbox("Name: " + name(0).InnerText + "" & Microsoft.VisualBasic.Chr(10)
& "" + "Telephone: " + telephone(0).InnerText + "" &
Microsoft.VisualBasic.Chr(10) & "" + "Email: " + email(0).InnerText + "" &
Microsoft.VisualBasic.Chr(10) & "" + "Age: " + age(0).InnerText + "" &
Microsoft.VisualBasic.Chr(10) & "" + "sex: " + sex(0).InnerText + "" &
Microsoft.VisualBasic.Chr(10) & "")

: g‫ وه‬D‫اﺡ‬+* (uot$ web services ‫"!ام ال‬#‫( ا‬-/K +/P


+&K ‫&ل ا&ت‬,"#‫ل وا‬#‫ﻩ إر‬oj B* 3"; ‫ي‬7‫ وا‬: The web service server -1
. ASP.NET ‫ وال‬IIS ‫"!ام ال‬#$ SOAP ‫ل ال‬1‫آ‬1P+$
<‫ وإ‬B* ‫&ل ا&ت‬,"#‫ل و ا‬#‫ر‬ $ Client D /‫ي ;ﺱ‬7‫ وا‬: The proxy object -2
‫ل‬oj B* HttpWebRequest ‫ ال‬gh ‫ﻩ‬T;+.P 3"; ¬‫ ﺡ‬web Services Server ‫ال‬
.¨$‫ء اﺱ‬w)‫ ا‬gh ‫"ﻩ‬:$ * 1‫ وه‬WebProxy ‫س‬o%‫ا‬
Web ‫ل‬$ iO$‫ ر‬3"; g"‫ن وا‬1$w$ (‫( ا!ﺹ‬iH‫ا‬1‫ ا‬1‫ وه‬: The client application -3
Services Server
: g"‫ ا‬D%'‫ ا‬gh /‫آ‬

126
;H ASP.NET Web Services ‫وع‬+'* D/.$ ‫م‬1, web services server ‫'ء‬s‫و‬
‫س‬o%‫ر;¬ ا‬1"$ ‫م‬1, 3u System.Web.Services Name Spaces gK"‫وﺱ‬
:‫ل‬t/‫ آ‬g-; /‫وع وآ‬+'/- g‫ﺱ‬+‫س ا‬o%- WebService
C #:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://my_url.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {}
[WebMethod]
public int Add(int a, int b)
{
return a + b;
}

VB.NET:
Imports System
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

<WebService(Namespace="http://my_url.com/")> _
<WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)> _
Public Class Service
Inherits System.Web.Services.WebService

Public Sub New()


End Sub

<WebMethod()> _
Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
End Class

127
I* <‫و‬2‫( ا‬/,‫ ا‬I/H —P ‫ع‬H‫ر‬ $ ‫م‬1,; C‫ ذ‬.$‫ و‬B ‫ و‬A B"/9 ‫&ل‬,"#‫ ا‬3"; ¬‫ﺡ‬
+i^; /‫ وآ‬SOAP ‫ل ال‬1‫آ‬1P+$ ‫"!ام‬#$ XML D%V <-K Client ‫( إ< ال‬t‫( ا‬/,‫ا‬
: g"‫ ا‬D%'‫ ا‬gh

‫ل‬$ ‫ﻩ‬9h‫ و إر‬Dll File <‫¨ إ‬$‫س اﺱ‬o%‫ ا‬D;1‫ﺡ‬P e‫ ;)† أو‬Client ‫*— ال‬+$ ‫'ء‬s‫و‬
: g-; /‫"!ا*ﻩ آ‬#‫ ا‬3";‫ و‬Client Resources
C #:
using System;
class Client_side
{
public static void Main(string[] argv)
{
My_main_class mm = new My_main_class();
int x = Convert.ToInt16(argv[0]);
int y = Convert.ToInt16(argv[1]);
int sum = mm.Add(x, y);
Console.WriteLine(sum);
}
}
}

128
VB.NET:
Class Client_side

Public Shared Sub Main(ByVal argv As String())


Dim mm As My_main_class = New My_main_class
Dim x As Integer = Convert.ToInt16(argv(0))
Dim y As Integer = Convert.ToInt16(argv(1))
Dim sum As Integer = mm.Add(x, y)
Console.WriteLine(sum)
End Sub
End Class

(!‫ﺱ‬:‫ ا‬gh D‫ﺹ‬T"‫( ا‬h‫) آ‬P ‫ف‬1#‫ و‬Web services ‫ ال‬gh ‫ت‬##2‫ ا‬:$ ‫ا‬7%‫وه‬
...‫"ب‬%‫ ا‬B* (9‫ر‬1‫ا‬

129
: FTP – File Transfer Protocol Programming 5.5

‫ل ال‬1‫آ‬1P+$ 1‫ وه‬Application Layer ‫ت ال‬e1‫آ‬1P+$ B* +j‫ل أ‬1‫آ‬1P+$ ‫ح‬+'$ :‫ف &أ ه‬1#
Ih‫ و ر‬downloading D;w:P (-/K gh g##‫ أ‬D%'$ ‫ي ;ﺱ"!م‬7‫ وا‬FTP
‫ت‬%&'‫*)ت ا‬+$ †-d‫ ا‬gh ‫دة‬.‫ وآ‬FTP Server ‫ و إ< ال‬B* ‫ت‬T-/‫ا‬uploading
Port‫< ال‬-K :S"$ Server‫م ال‬1,; ¬‫ ﺡ‬Client/Server ‫د‬1H‫< و‬-K /".P g"‫و ا‬
TCP Connection Oriented ‫"!ام ال‬#$ 21 Port‫ ال‬1‫ وه‬FTP D ‫ﺹ‬S!/‫ا‬
‫'ء‬ $ Client ‫ ال‬B* †-m ‫رود‬1 ‫"^ر‬e‫ ا‬Ik1$ Server‫< ال‬,&; ¬‫ﺡ‬Protocol
3"; ‫ﺡت‬oS‫ ا‬B* ‫آ‬G"‫ وا‬Authentication ¨,‫ت ا"ﺡ‬-/K ‫اء‬+H‫ إ‬.$‫ﻩ و‬.* Session
‫&ل‬,"#‫ ا‬3"; ‫ف‬1# ‫ي‬7‫ وا‬Port‫ ال‬39‫ﺡ; ر‬P 3"; ¬‫ﺱ( ﺡ‬-)$ ‫< ا&ء‬-K (,h‫ا‬1/‫ا‬
‚"P‫ و‬Server‫ ال‬gh 20 Port‫ ال‬+&K ‫ن‬1$w‫ز ا‬iH <‫ل إ‬#‫ر‬s‫ ا‬3";‫ﻩ و‬oj B* ‫ا&ت‬
: g"‫ ا‬D%'‫ ا‬gh /‫( آ‬-/.‫‰ ا‬7‫ه‬

e‫ ;)† أو‬FTP Server ‫زك ك‬iH D/.; ¬‫ﺡ‬$ C; FTP ‫*( ال‬j D.T" :>‹*
: g"‫ ا‬D%'‫ ا‬gh +i^; /‫ و آ‬IIS ‫ ال‬I* C; ("&t* FTP Services ‫ أن ال‬B* ‫آ‬G"‫ا‬

130
Administrative Tools 3u Control Panel B* Services ‫ ب‬i-.TP B* ‫آ‬G"‫ ا‬3u B*‫و‬
: g"‫ ا‬D%'‫ ا‬gh +i^; /‫ وآ‬Services 3u

: g"‫ ا‬D%'‫ ا‬gh /‫ آ‬+i^; ¬‫ﺡ‬$ IIS ‫ ال‬gh ‫ﻩ‬:* ‫آ‬G"‫ ا‬3u

131
FTP Commands : v‫أو‬
3K; ¬‫ ﺡ‬+&‫ إ< ﺡ آ‬Telnet ‫( ال‬-/K FTP D ‫"!ام‬#e‫ل و ا‬SPe‫( ا‬-/K ‫'&ﻩ‬P
I* †m!"‫( ا‬-/K ioj B* 3"; g"‫ وا‬+*‫وا‬2‫ ا‬B* (K1/)* FTP ‫ل ال‬1‫آ‬1P+$
: g"‫ ا‬D%'‫ ا‬gh /‫( آ‬-/.‫‰ ا‬7‫‚ ه‬P‫ و‬Remote Host ‫ ال‬I* ‫ أو‬Server‫ال‬

:FTP Commands ‫ ال‬3‫ه‬2 ‫ح‬+V :‫وه‬

(‫ﺱ‬-)‫'ء ا‬s ¨,‫( ا"ﺡ‬-/. ($1-O* USER <username> & PASS


<password>
.$ Server‫ ال‬B* ‹-* D;w:" ‫و;ﺱ"!م‬ RECV ‫ أو‬RETR <filename>
‹-/‫ ا‬3#‫ﺡ; ا‬P
.$ Server‫‹ إ< ال‬-/‫ ا‬Ih+ ‫و;ﺱ"!م‬ SEND ‫ أو‬STOR <filename>
‹-/‫ ا‬3#‫ﺡ; ا‬P
3"; g"‫( أو ه«( ا&ت ا‬.&m ;‫"ﺡ‬ TYPE <type indicator>
: g-; /‫ وآ‬i-,
-a ASCII –e EBCDIC – I for Binary
3"# ‫ي‬7‫وا‬Data - L<Byte Size>

132
‫ﻩ‬-,
‫ أو‬Passive ‫اء‬1# (‫ﺱ‬-)‫ع ا‬1 ;‫"ﺡ‬ PASV
3"; Passive ‫ ﺡ( ال‬gh ‫ إذ اﻩ‬Active
Ih‫ ﺡ( ورود أو ر‬gh >,h ‫ل‬SPe‫ ا‬D.TP
. Server‫ و إ< ال‬B* ‹-* ‫أي‬
uploading & ‫ل و‬SPe‫ﺡﺹ ﺡ( ا‬T Status ‫ أو‬STAT
Downloading
D*."‫ ا‬gh ‫ﻩ‬-K ‫رف‬."* 1‫ ه‬/‫ آ‬g‫وه‬ Delete , cd , mkdir , rename …
‫ ^م ال‬gh ‫ات‬-)/‫ت و ا‬T-/‫ ا‬I*
DOS
Remote Host ‫ ال‬I* (‫ﺱ‬-)‫ء ا‬is Close ‫ أو‬QUIT

: COM Components ‫ﺩام‬p – ‫  اﺩوت‬FTP ‫ *< ال‬o*‫ اﻉ‬: k


‫ء‬wH 1‫ وه‬ITC – Internet Transfer Control +&K FTP ‫"!ام ال‬#‫ اوت  ا‬3KP
New Windows Application ‫'ء‬ $ 39 ‫&ء‬-‫ و‬COM Components Controls ‫ ال‬B*
: g"‫ ا‬D%'‫ ا‬gh /‫آ‬

: ("‫ ا‬Name Spaces (hk $ 39 3u


C #:
using System.IO;
using System.Reflection;

VB.NET:
imports System.IO
imports System.Reflection

: Upload Button ‫ إ< ال‬g"‫د ا‬1%‫( ا‬hk‫ إ‬3u


C #:
private void button1_Click(object sender, System.EventArgs e)
{
FileInfo thisFile = new FileInfo(tbFile.Text);
Type ITC;
object[] parameter= new object[2];
object ITCObject;
ITC = Type.GetTypeFromProgID("InetCtls.Inet");
ITCObject = Activator.CreateInstance(ITC);
parameter[0] = (string)tbServer.Text;

133
parameter[1] = (string)"PUT " + thisFile.FullName + " /" +
thisFile.Name;
ITC.InvokeMember("execute", BindingFlags.InvokeMethod,null, ITCObject,
parameter);}

VB.NET:
Private Sub button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs)
Dim thisFile As FileInfo = New FileInfo(tbFile.Text)
Dim ITC As Type
Dim parameter(2) As Object
Dim ITCObject As Object
ITC = Type.GetTypeFromProgID("InetCtls.Inet")
ITCObject = Activator.CreateInstance(ITC)
parameter(0) = CType(tbServer.Text, String)
parameter(1) = CType("PUT ", String) + thisFile.FullName + " /" +
thisFile.Name
ITC.InvokeMember("execute", BindingFlags.InvokeMethod, Nothing,
ITCObject, parameter)
End Sub

Name Space B/k ‫د‬1H1/‫ وا‬Type Class ‫ل ال‬oj B* ITC ‫;‹ ال‬+.P (;‫ ا&ا‬gh 3P
+;+/P gh i*‫"!ا‬#e C‫ وذ‬Object ‫ع‬1:‫ ا‬B* Array :h+K 3u System.Reflection
ITC ‫ ال‬B/k ‫دة‬1H1/‫ وا‬InvokeMember ‫د‬1t/‫ إ< ا‬FTP Server ‫‹ و ال‬-/‫ ا‬3#‫ا‬
... Control Object
: -)/‫ ا‬gh ‫ﻩ‬.h‫ ر‬3"# ‫ي‬7‫‹ ا‬-/‫) ا‬P ‫ف‬1#
C:\Inetpub\ftproot

134
: Web Class ‫ﺩام ال‬p – ‫  اﺩوت‬FTP ‫ *< ال‬o*‫ اﻉ‬: 3k
Name Spaces B/k ‫دة‬1H1/‫ وا‬web Class ‫"!ام‬#$ FTP ‫*)( ال‬+$ B%/;
‫ و ال‬WebRequest ‫ ال‬I* D*."‫ ا‬gh /‫ﻩ آ‬.* D*."‫( ا‬-/K ‫'&ﻩ‬P‫ و‬System.Net
::%/; ¬‫ ﺡ‬HTTP ‫*)( ال‬+$ gh i.* :-*.P g"‫ و ا‬Classes webResponse
: g-; /‫ آ‬g‫ وه‬FTP Protocol ‫ ال‬I* D*." i:* ‫دة‬T"#e‫ا‬

‫ي‬7‫ وا‬WebClient ‫س‬o%‫"!ام ا‬#‫ ا‬dot net Framework 2 3K‫ د‬3P ‫ إذ‬WebClient -
3";‫ و‬System.Net Name Spaces B* ‫ﻩ‬K"#‫ ا‬3"; ‫ي‬7‫ وا‬FTP ‫ ال‬I* D*."‫ ا‬3K;
: g-; /‫ﻩ آ‬T;+.P
C #:
using System;
using System.Net;

namespace Web_Client
{
class Program
{
public static void Main(string[] args)
{
string filename = "ftp://ms.com/files/dotnetfx.exe";
WebClient client = new WebClient();
client.DownloadFile(filename, "dotnetfx.exe");

}
}

VB.NET:
Imports System
Imports System.Net
Namespace Web_Client

Class Program

Public Shared Sub Main(ByVal args As String())


Dim filename As String = "ftp://ms.com/files/dotnetfx.exe"
Dim client As WebClient = New WebClient
client.DownloadFile(filename, "dotnetfx.exe")
End Sub
End Class
End Namespace

135
: g-; /‫ف آ‬+.;‫ و‬FTP ‫ ال‬I* D/.‫أ ا‬$‫ و‬D)‫ و;ﺱ"!م "ﺱ‬FtpRequestCreator -

C #:
using System;
using System.Net;

namespace FTP
{
public class FtpRequestCreator : IWebRequestCreate
{
public FtpRequestCreator()
{
}

public System.Net.WebRequest Create(System.Uri uri)


{
return new FtpWebRequest(uri);
}
}
}

VB.NET:
Imports System
Imports System.Net
Namespace FTP

Public Class FtpRequestCreator


Implements IWebRequestCreate

Public Sub New()


End Sub

Public Function Create(ByVal uri As System.Uri) As


System.Net.WebRequest
Return New FtpWebRequest(uri)
End Function
End Class
End Namespace

download or upload a file on an FTP server D/. ‫ و;ﺱ"!م‬FtpWebRequest -


: g-; /‫ آ‬iT;+.P 3";‫و‬

C #:
using System;
using System.Net;

namespace FTP
{
public class FtpWebRequest : WebRequest
{
private string username = "Fadi";

136
internal string password = "fff";
private Uri uri;
private bool binaryMode = true;
private string method = "GET";

internal FtpWebRequest(Uri uri)


{
this.uri = uri;
}

public string Username


{
get { return username; }
set { username = value; }
}

public string Password


{
set { password = value; }
}

public bool BinaryMode


{
get { return binaryMode; }
set { binaryMode = value; }
}

public override System.Uri RequestUri


{
get { return uri; }
}

public override string Method


{
get { return method; }
set { method = value; }
}

public override System.Net.WebResponse GetResponse()


{
FtpWebResponse response = new FtpWebResponse(this);
return response;
}
}
}

137
VB.NET:
Imports System
Imports System.Net
Namespace FTP

Public Class FtpWebRequest


Inherits WebRequest
Private username As String = "Fadi"
Friend password As String = "fff"
Private uri As Uri
Private binaryMode As Boolean = True
Private method As String = "GET"

Friend Sub New(ByVal uri As Uri)


Me.uri = uri
End Sub

Public Property Username() As String


Get
Return username
End Get
Set(ByVal value As String)
username = value
End Set
End Property

Public WriteOnly Property Password() As String


Set(ByVal value As String)
password = value
End Set
End Property

Public Property BinaryMode() As Boolean


Get
Return binaryMode
End Get
Set(ByVal value As Boolean)
binaryMode = value
End Set
End Property

Public Overloads Overrides ReadOnly Property RequestUri() As


System.Uri
Get
Return uri
End Get
End Property

Public Overloads Overrides Property Method() As String


Get
Return method

138
End Get
Set(ByVal value As String)
method = value
End Set
End Property

Public Overloads Overrides Function GetResponse() As


System.Net.WebResponse
Dim response As FtpWebResponse = New FtpWebResponse(Me)
Return response
End Function
End Class
End Namespace

:g-; /‫ آ‬iT;+.P 3";‫ و‬Server‫ ال‬D&9 B* ‫د‬+‫( ا‬-/. ‫ و;ﺱ"!م‬FtpWebResponse -

C #:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;

namespace FTP
{
public class FtpWebResponse : WebResponse
{
private FtpWebRequest request;
private FtpClient client;

internal FtpWebResponse(FtpWebRequest request)


{
this.request = request;
}
}
}

139
VB.NET:
Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Namespace FTP

Public Class FtpWebResponse


Inherits WebResponse
Private request As FtpWebRequest
Private client As FtpClient

Friend Sub New(ByVal request As FtpWebRequest)


Me.request = request
End Sub
End Class
End Namespace

D,:‫( ا‬-/. ‫ف ;ﺱ"!م‬1# ‫ي‬7‫ وا‬Stream ‫;‹ ال‬+." ‫ و;ﺱ"!م‬FtpWebStream -


: g-; /‫ آ‬g&* D%'$ ‫ف‬+.;‫و‬

C #:
using System;
using System.IO;
using System.Net.Sockets;

namespace FTP
{
internal class FtpWebStream : Stream
{
private FtpWebResponse response;
private NetworkStream dataStream;

public FtpWebStream(NetworkStream dataStream, FtpWebResponse


response)
{
this.dataStream = dataStream;
this.response = response;
}
}
}

140
VB.NET:
Imports System
Imports System.IO
Imports System.Net.Sockets
Namespace FTP

Friend Class FtpWebStream


Inherits Stream
Private response As FtpWebResponse
Private dataStream As NetworkStream

Public Sub New(ByVal dataStream As NetworkStream, ByVal response


As FtpWebResponse)
Me.dataStream = dataStream
Me.response = response
End Sub
End Class
End Namespace

‫ﺩام‬p Server ‫ز‬C’ 5‫ إ‬Client ‫ز‬C’ ]* %* <  "?' ‫ل‬3* : ‫راﻉ‬
:Socket ‫ وال‬Stream ‫ال‬

Stream ‫ ال‬I* D*."$‫ و‬Client / Server B)*+$ ‫'ء‬ $ ‫م‬1, ‫ف‬1# ‫ء‬w)‫ا ا‬7‫ ه‬gh
Stream ‫ ال‬+&K ‫ﻩ‬#‫ و إر‬Byte Array <‫‹ إ‬-/‫ ا‬D;1‫"ﺡ‬$ ‫م‬1, ‫ف‬1# Library
‫ل أو ال‬#‫ر‬s$ ‫ء ا!ص‬w)‫*)( ا‬+&‫ و‬، TCP Connection ‫ و‬Socket ‫"!ام ال‬#$
: g"‫ ا‬D%'‫ ا‬gh /‫; آ‬H ‫وع‬+'* ‫'ء‬ $ 39 Client

: ("‫ ا‬Name Spaces ‫ف ﺱ"!م‬1#


C #:
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

VB.NET:
imports System.IO
imports System.Net
imports System.Net.Sockets
imports System.Text

141
: g"‫د ا‬1%‫( ا‬$"%$ 39 Send Button ‫ ال‬gh
C #:
try
{
Stream fileStream = File.OpenRead(textBox1.Text);
// Alocate memory space for the file
byte[] fileBuffer = new byte[fileStream.Length];
fileStream.Read(fileBuffer, 0, (int)fileStream.Length);
// Open a TCP Connection and send the data
TcpClient clientSocket = new TcpClient(textBox2.Text,8880);
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Write(fileBuffer,0,fileBuffer.GetLength(0));
networkStream.Close();
}
catch (Exception ex){MessageBox.Show(ex.Message);}

VB.NET:
Try
Dim fileStream As Stream = File.OpenRead(textBox1.Text)
Dim fileBuffer(fileStream.Length) As Byte
fileStream.Read(fileBuffer, 0, CType(fileStream.Length, Integer))
Dim clientSocket As TcpClient = New TcpClient(textBox2.Text, 8880)
Dim networkStream As NetworkStream = clientSocket.GetStream
networkStream.Write(fileBuffer, 0, fileBuffer.GetLength(0))
networkStream.Close
Catch ex As Exception
Msgbox(ex.Message)
End Try

<"‫ وﺡ‬Stream Object ‫ﻩ ب‬:;w!P‫ﻩ و‬#‫د إر‬1 ‫ي‬7‫‹ ا‬-/‫اءة ا‬+,$ (;‫ ا&ا‬gh :/9
:/9‫ و‬Byte ‫ع‬1:‫ ا‬B* (h1TS* <‫ﻩ إ‬-;1‫ﺡ‬P B* $e Socket ‫ ال‬+&K ‫ﻩ‬#‫ إر‬IO"‫ﺱ‬
B/k ‫دة‬1H1/‫ وا‬Read ‫د‬1t/‫"!ام ا‬#$ ‫&«"ﻩ‬.P 3u fileBuffer ‫"ﻩ ب‬/‫"ﺱ‬$
TCP Connection ‫"!ام ال‬#$ Server ‫ ال‬I* ‫ل‬SP‫'ء ا‬ $ :/9 C‫ ذ‬.$‫ و‬fileStream
NetworkStream ‫"!ام‬#$ Server ‫ إ< ال‬fileBuffer ‫;ت ال‬1"‫ل *ﺡ‬#‫ إر‬3P ¬‫ﺡ‬
... Class

‫وع‬+'* ‫'ء‬ $ 39 ‫ﻩ‬:;w!P‫‹ و‬-/‫&ل ا‬,"#‫ ا‬BK ‫ل‬1«‫ﺱ‬/‫ ا‬1‫ وه‬Server ‫ء‬wH ()*+&‫و‬
: g"‫ ا‬D%'‫ ا‬gh +i^; /‫; آ‬H

142
: ("‫ ا‬Name Spaces ‫ف ﺱ"!م‬1#
C #:
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;

VB.NET:
imports System.Threading
imports System.Net
imports System.Net.Sockets
imports System.Text
imports System.IO

: g-; /‫ وآ‬handlerThread i/#‫ ا‬B%‫ ا"( و‬Method ‫( ال‬hk‫ إ‬3u


C #:
public void handlerThread()
{
Socket handlerSocket = (Socket)alSockets[alSockets.Count-1];
NetworkStream networkStream = new
NetworkStream(handlerSocket);
int thisRead=0;
int blockSize=1024;
Byte[] dataByte = new Byte[blockSize];
lock(this)
{
// Only one process can access
// the same file at any given time
Stream fileStream = File.OpenWrite(@"c:\upload");

while(true)
{
thisRead=networkStream.Read(dataByte,0,blockSize);
fileStream.Write(dataByte,0,thisRead);
if (thisRead==0) break;
fileStream.Close();
}
lbConnections.Items.Add("File Written");
handlerSocket = null;
}

143
VB.NET:
Public Sub handlerThread()
Dim handlerSocket As Socket = CType(alSockets(alSockets.Count - 1),
Socket)
Dim networkStream As NetworkStream = New
NetworkStream(handlerSocket)
Dim thisRead As Integer = 0
Dim blockSize As Integer = 1024
Dim dataByte(blockSize) As Byte
SyncLock Me
Dim fileStream As Stream = File.OpenWrite("c:\upload")
While True
thisRead = networkStream.Read(dataByte, 0, blockSize)
fileStream.Write(dataByte, 0, thisRead)
If thisRead = 0 Then
' break
End If
fileStream.Close()
End While
lbConnections.Items.Add("File Written")
handlerSocket = Nothing
End SyncLock
End Sub

8880 Port‫< ال‬-K TCP Connection "T C‫;ة وذ‬H ‫ى‬+j‫د أ‬1t* ($"%$ 39 3u
: g-; /‫ وآ‬listenerThread i/#‫ ا‬B%‫ و‬i-K :S"‫ وا‬gk‫ا‬+"h‫ ا‬1‫وه‬

C #:
public void listenerThread()
{
80);8TcpListener tcpListener = new TcpListener(8
tcpListener.Start();
while(true)
{
Socket handlerSocket = tcpListener.AcceptSocket();
if (handlerSocket.Connected)
{
lbConnections.Items.Add(handlerSocket.RemoteEndPoint.ToString() +
" connected.");
lock (this)
{
alSockets.Add(handlerSocket);
}
ThreadStart thdstHandler = new
ThreadStart(handlerThread);
Thread thdHandler = new Thread(thdstHandler);
thdHandler.Start();
}
}
}

144
VB.NET:
Public Sub listenerThread()
Dim tcpListener As TcpListener = New TcpListener(8880)
tcpListener.Start()
While True
Dim handlerSocket As Socket = tcpListener.AcceptSocket
If handlerSocket.Connected Then
lbConnections.Items.Add(handlerSocket.RemoteEndPoint.ToString +
" connected.")
SyncLock Me
alSockets.Add(handlerSocket)
End SyncLock
Dim thdstHandler As ThreadStart = New ThreadStart(handlerThread)
Dim thdHandler As Thread = New Thread(thdstHandler)
thdHandler.Start()
End If
End While
End Sub

: Form Load —*+&‫ ا‬D'P ‫أ‬$ ‫ إ< ﺡث‬g"‫د ا‬1%‫( ا‬hk $ 39 3u

C #:
private void Form1_Load(object sender, System.EventArgs e)
{
IPHostEntry IPHost = Dns.GetHostByName(Dns.GetHostName());

lbConnections.Text = "My IP address is " +


IPHost.AddressList[0].ToString();

alSockets = new ArrayList();

Thread thdListener = new Thread(new ThreadStart(listenerThread));


thdListener.Start();}

145
VB.NET:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As
System.EventArgs)
Dim IPHost As IPHostEntry = Dns.GetHostByName(Dns.GetHostName)
lbConnections.Text = "My IP address is " + IPHost.AddressList(0).ToString
alSockets = New ArrayList
Dim thdListener As Thread = New Thread(New
ThreadStart(listenerThread))
thdListener.Start()
End Sub

‹;+."$ ih :/9 g"‫ وا‬listenerThread Method ‫ ال‬7T:P 3P Thread ‫"!ام ال‬#$
‫ ال‬B* gPG; †-m ‫ل أي‬1&9 3"# ¬‫ ﺡ‬8880 Port‫< ال‬-K ‫ﻩ‬-.TP‫ و‬tcpListener ‫ال‬
ih 3"# g"‫ وا‬handlerThread ‫د‬1t/‫ء ا‬K"#‫ ا‬C‫ ذ‬.$‫ و‬Port‫ا ال‬7‫< ه‬-K Client
‫ن‬%/‫ ا‬gh i:;w!P‫ و‬iP‫اء‬+9 3u Byte Array gh i:;w!P‫ و‬Stream Data ‫&ل ال‬,"#‫ا‬
<-K ‫ي‬1"‫ي ;ﺡ‬7‫ وا‬Stream ‫ر ﻩ ال‬+* ¬‫ ﺡ‬fileStream.Write ‫"!ام ال‬#$‫ﺡد و‬/‫ا‬
... dataByte Array ‫ وال‬thisRead ‹-/‫ ا‬3#‫ا‬

146
Dot Net Networks & TCP/IP Programming

Chapter 6
Network Security Programming

Network Security Programming

Dot Net Security Namespaces Overview


1. Cryptography
2. Permission

147
\>‫\ ا[ ا>
] ا‬

: Network Security Programming : 6.1

unauthorized ‫ل‬1!/‫ ا‬+&d ‫ل‬1j‫ ا‬B* ‫;( ا&ت‬/‫ﺡ‬$ B*2‫ ا‬B* ‫ة‬+%T‫!ﺹ ا‬-"P
Access
: i/‫† وأه‬#‫ة أ‬K ‫"!ام‬#$

+T'"‫ ا‬Ch‫ و‬+T'"‫ ا‬Data Encryption & Decryption -


(#+‫ ا‬D#+* ‫;( ا'!ﺹ‬1‫ ه‬B* ¨,‫ ا"ﺡ‬Authentications -
‫ﺡت‬oS‫ت و ا‬#‫ اﺱ‬7T:P‫ﺡ; و‬P Set Policies & Permissions -

‫"!ام ال‬#$ ,$# ‫ه‬+‫ ذآ‬g"‫;( ا‬/‫† اﺡ‬#‫ أ‬I/H  ‫ اوت‬gh /K‫د‬
(K+T‫"&ت ا‬%/‫ ا‬B* (/!k (K1/)* <-K ‫ي‬1"‫ﺡ‬P g"‫ وا‬Security Namespaces
g"‫ ا‬D%'‫ ا‬gh /‫ آ‬g‫وه‬

: Cryptography Namespace Overview : v‫أو‬

Ch‫ و‬+T'P ‫ت‬-/K ‫ * ;!ﺹ‬D%$ 3"iP g"‫"&( ا‬%/‫ ا‬g‫ وه‬:Cryptography in .NET
g##‫ أ‬D%'$ ‫ﺱ"!م‬P‫ﺱ و‬%.$‫ و‬Cipher Text <‫ إ‬Clear Text B* ‫ ا&ت‬+T'P
3‫ﺱ‬,P IO"‫ وﺱ‬، ‫م‬o"#e‫ ا‬:K ‫ه‬+T'P Ch‫ل و‬#‫ر‬s‫( ا‬-/K D&9 ‫ ا&ت‬+T'"
:g‫ﺱم رﺱ( ه‬9‫( أ‬uou <‫ إ‬ih +T'"‫ق ا‬+m

‫ﻩ‬P‫ي ذا‬+‫"ح اﺱ‬T/‫ﻩ ;ﺱ"!م ا‬h‫ و‬Du/"/‫ب ا‬1-#2‫ ا‬:Symmetric algorithms -A


+T'"‫ ا‬Ch‫ و‬+T'"‫( ا‬-/K ‫اء‬+Hs (.;+# (,;+m g‫ وه‬+T'"‫ ا‬Ch‫ و‬+T'"‫( ا‬-/.
Du/"/‫ ا‬+T'"‫ اوت  ا‬/K‫( ود‬-u/"/‫ ا‬+‫( ا‬,;+O‫( آ‬:*À ‫ ﺱ‬i:‫ آ‬e
:g‫ وه‬Algorithms Classes ‫ ال‬B* (K1/)/$

: DES-Data Encryption Standard ‫"!ام ال‬#$ +T'"‫ ا‬3K; ‫ي‬7‫س ا‬o%‫ ا‬-
DESCryptoServiceProvider
RC2CryptoServiceProvider : RC2 Algorithms 3K; ‫ي‬7‫س ا‬o%‫ ا‬-
RijndaelManaged : Rijndael Managed Algorithms 3K; ‫ي‬7‫س ا‬o%‫ ا‬-

+&K i#‫( وإر‬#+‫ ا‬+T'P g‫ ه‬Du/"/‫ب ا‬1-#2$ +T'"‫ ا‬gh ‫"دة‬./‫( ا‬,;+O‫ا‬
9‫ا و‬H (K ‫ن‬1%P 9 g"‫ ا‬GO!‫ن ﺱ&( ا‬ h (,;+O‫‰ ا‬7‫"!ام ه‬#$ B‫آ‬e (%&'‫ا‬
‫ت‬-/K i-K ‫ى‬+)P‫ق و‬+‫ﺱ‬P 9 ‫( أو‬#+‫ ا‬,h <‫دي إ‬a; /* ‫‰ ا&ت‬7‫‡ ه‬.$ ,T
Network ‫ ال‬B* ‰w)‫ﺡ‬P 9 g"‫ ا‬Di‫ ا‬3)‫ اﺡ‬BK C‫ة ه‬+T'‫ ا‬Ch (‫ﺡو‬/
‫ى ال‬1"‫< *ﺱ‬-K 3"P +T'"‫( ا‬-/K D.)$ (-%'/‫‰ ا‬7‫ ه‬D‫ ﺡ‬3P‫و‬.. Bandwidth
3"; ¬‫ ﺡ‬CryptoStream Class ‫( ال‬-/.‫‰ ا‬7i ‫ﺱﻩ و;ﺱ"!م‬T Stream
IV +T'"‫ ا‬CT ‫"ح‬T*‫ و‬Encryption Kay +T'"‫"ح ا‬T* +T'" B‫"ﺡ‬T* ‫"!ام‬#‫ا‬
(-/K gh B‫"ﺡ‬T/‫ﺱ ا‬T ‫"!ام‬#‫ط ا‬+"';‫ و‬Installation Victor Decryption
‫ أو‬MemoryStream ‫ ال‬I* ¨$‫س اﺱ‬o%‫ و;ﺱ"!م ا‬+T'"‫ ا‬Ch‫ و‬+T'"‫ا‬
‫ أو‬TripleDES ‫ أو‬DES ‫اء‬1# +T'"‫ع ا‬1‫ و‬Stream Data ‫ر ﻩ ال‬+/ ¬‫ ﺡ‬FileStream

148
16 B* B‫"ﺡ‬T/‫ ا‬o‫ن آ‬1%"; ‫ إذ;)† أن‬TripleDES ‫ف ﺱ"!م ال‬1# ‫ل‬t/‫ وآ‬، RC2
... Bits

Symmetric Stream Encryption Example:

C #:
byte[] Key = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,0x10,
0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
byte[] IV = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,0x10,
0x11, 0x12, 0x13, 0x14, 0x15, 0x16};

string phrase = msg.Text;


MemoryStream ms = new MemoryStream();

TripleDESCryptoServiceProvider tdes = new


TripleDESCryptoServiceProvider();
CryptoStream csw = new CryptoStream(ms,tdes.CreateEncryptor(Key, IV),
CryptoStreamMode.Write);

csw.Write(Encoding.ASCII.GetBytes(phrase), 0, phrase.Length);
csw.FlushFinalBlock();

byte[] cryptdata = ms.GetBuffer();

textBox1.Text=Encoding.ASCII.GetString(cryptdata, 0, (int)ms.Length);

VB.NET:
Dim Key As Byte() = {&H1, &H2, &H3, &H4, &H5, &H6, &H7, &H8, &H9,
&H10, &H11, &H12, &H13, &H14, &H15, &H16}
Dim IV As Byte() = {&H1, &H2, &H3, &H4, &H5, &H6, &H7, &H8, &H9, &H10,
&H11, &H12, &H13, &H14, &H15, &H16}

Dim phrase As String = msg.Text


Dim ms As MemoryStream = New MemoryStream()

Dim tdes As TripleDESCryptoServiceProvider = New


TripleDESCryptoServiceProvider()
Dim csw As CryptoStream = New CryptoStream(ms,
tdes.CreateEncryptor(Key, IV), CryptoStreamMode.Write)

csw.Write(Encoding.ASCII.GetBytes(phrase), 0, phrase.Length)
csw.FlushFinalBlock()

Dim cryptdata As Byte() = ms.GetBuffer()

textBox1.Text=Encoding.ASCII.GetString(cryptdata, 0, CInt(ms.Length))

149
Symmetric Stream Decryption Example:

C #:
byte[] Keyy = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,0x10,
0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
byte[] IVv = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,0x10,
0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
ms.Position = 0;
byte[] data = new byte[1024];
CryptoStream csr = new CryptoStream(ms,tdes.CreateDecryptor(Keyy,
IVv),CryptoStreamMode.Read);
int recv = csr.Read(data, 0, data.Length);
string newphrase = Encoding.ASCII.GetString(data, 0, recv);
textBox1.Text=newphrase;

VB.NET:
Dim Keyy As Byte() = {&H1, &H2, &H3, &H4, &H5, &H6, &H7, &H8, &H9,
&H10, &H11, &H12, &H13, &H14, &H15, &H16}
Dim IVv As Byte() = {&H1, &H2, &H3, &H4, &H5, &H6, &H7, &H8, &H9,
&H10, &H11, &H12, &H13, &H14, &H15, &H16}
ms.Position = 0
Dim data As Byte() = New Byte(1023) {}
Dim csr As CryptoStream = New CryptoStream(ms,
tdes.CreateDecryptor(Keyy, IVv), CryptoStreamMode.Read)
Dim recv As Integer = csr.Read(data, 0, data.Length)
Dim newphrase As String = Encoding.ASCII.GetString(data, 0, recv)
textBox1.Text=newphrase

B* ‫"!ام أي‬#$ (-#+/‫ ا&ت ا‬+T'"$ (;‫ ا&ا‬gh ‫م‬1, ‫ت‬%&'‫*)ت ا‬+$ gh
‫ ال‬+&K i#‫ر‬s Stream <‫ة إ‬+T'/‫ل ا&ت ا‬1‫ ﺡ‬3u +T'" (,$‫† اﺱ‬#2‫ا‬
(#+‫&ل ا‬,"#$ D&,"‫ﺱ‬/‫ف ا‬+O‫م ا‬1,; 3u ، Network Stream ‫"!ام ال‬#$ Socket
g‫ ه‬/‫ن آ‬1%P +T'"‫ ا‬Ch (-/K ، Socket ‫ ال‬+&K Network Stream ‫"!ام ال‬#$
Byte gh ‫ن‬w!P‫ و‬memory stream ‫( إ< ال‬#+‫ ا‬D/‫ﺡ‬P 3u (*!"‫ﺱ‬/‫ارز*( ا‬1!‫ا‬
:g"‫ ا‬D%'‫ ا‬gh /‫ى وآ‬+j‫ة أ‬+* (#‫ل إ< ر‬1‫ﺡ‬P ‫ أن‬B%/; ‫ه‬:K Array

150
‫ب‬1-#2‫ ا‬B* *‫ أ‬+t‫ أآ‬1‫ وه‬Du/"* +‫ب ا‬1-#2‫ ا‬:Asymmetric algorithms -B
‫ ;ﺱ"!م‬+T'"‫ ا‬CT‫ و‬Public Kay ‫م‬K ‫"ح‬T* ‫"!ام‬#$ ‫ ا&ت‬+T'P ‫ إذ‬Du/"/‫ا‬
128 Bits ‫ و;ﺱ"!م‬B‫"ﺡ‬T/‫ ا‬B$ (9oK ‫ك‬:‫ن ه‬1%;‫ و‬Private Kay ‫ص‬j ‫"ح‬T*
Du/"* +‫ ا‬+T'"‫ اوت  ا‬/K‫&ت ود‬- +T'"‫† ا‬#‫ أ‬D‚h‫ أ‬1‫ وه‬+T'"
Tow Algorithms Classes ‫"!ام‬#$ Private Kay ‫"ح ا!ص‬T/‫ ا‬+T'P 3K; ‫ي‬7‫وا‬
:g‫وه‬
1- DSACryptoServiceProvider for Digital Signature Algorithm

‫م‬1,; ‫ل‬t/‫( وآ‬#+‫ ا‬D#+* ‫;( ا'!ﺹ‬1‫ ه‬B* ¨,‫ ا"ﺡ‬i:* ‫ف‬i‫وا‬: (/9+‫ ا‬I9‫ا‬1"‫ا‬
+T'"$ ‫م‬1,; C‫ ذ‬.$‫ و‬Hash Function‫"!ام ال‬#$ (#+ ‫!ﺹ‬-* 1"$ D#+/‫ا‬
g/9‫ ر‬I91"‫ﺱ"!م آ‬# ‫ي‬7‫"ح ا!ص وا‬T/‫ ا‬B;1%" ‰1P 3P ‫ي‬7‫( ا‬#+‫!ﺹ ا‬-*
CT$ ‫م‬1,h 3-"‫ﺱ‬/$ ¨-."; /$ *‫ أ‬،(#+‫ ا‬I* ‫م‬.‫"ح ا‬T/‫ ا‬D#+; 3u D#+/-
(*‫ارز‬1!‫ﺱ ا‬T ‫"!ام‬#$ C‫ ذ‬3"; ‫م و;)† أن‬.‫"ح ا‬T/‫"!ام ا‬#$ ‫!ﺹ‬-/‫ ا‬+T'P
‫ وه‬g"‫( ا‬#+‫!ﺹ ا‬-* ‫ذا آن‬ h ،‫!ﺹ‬-/‫ ا‬+T'P gh D#+/‫ ا‬i.&P‫ ا‬g"‫ا‬
D#+* ‫ أن ا'!ﺹ‬B* ¨,‫ه ;"ﺡ‬:K D#+/‫ وه ا‬g"‫ ا‬i‫ﺱ‬T g‫ ه‬3-"‫ﺱ‬/‫ا‬
. ‫ﺱﻩ‬T 1‫( ه‬#+‫ا‬
‫"ح‬T/‫ ا‬1" DSACryptoServiceProvider ‫ ال‬B* instance Ð': ‫ف‬1# (;‫ ا&ا‬gh
1 ‫ﻩ‬S‫ﺡ‬T‫ و‬Byte Array gh ‫ﻩ‬w!‫ و‬Hash sign Value ‫ن ال‬1% 3u ‫م وا!ص‬.‫ا‬
‫ﺱﻩ‬T 1‫ر أن ا'!ﺹ ه‬+, ‫ه‬:K i$'P ‫ذا‬ h ¨$‫ﺱ‬$ ‫رﻩ‬,‫; و‬H hash sign value
:g-; /‫( وآ‬-#+/‫( ا‬#+‫ﺹﺡ† ا‬
C #:
using System;
using System.Security.Cryptography;

class DSACSPSample
{

static void Main()


{
try
{
//Create a new instance of DSACryptoServiceProvider to generate
//a new key pair.
DSACryptoServiceProvider DSA = new DSACryptoServiceProvider();

//The hash value to sign.


byte[] HashValue =
{59,4,248,102,77,97,142,201,210,12,224,93,25,41,100,197,213,134,130,135}
;
//The value to hold the signed value.
byte[] SignedHashValue = DSASignHash(HashValue,
DSA.ExportParameters(true), "SHA1");

//Verify the hash and display the results.


if(DSAVerifyHash(HashValue, SignedHashValue, DSA.ExportParameters(false),
"SHA1"))
{Console.WriteLine("The hash value was verified.");}
else
{Console.WriteLine("The hash value was not verified.");}}
catch(ArgumentNullException e)
{Console.WriteLine(e.Message);}

151
}
public static byte[] DSASignHash(byte[] HashToSign, DSAParameters
DSAKeyInfo, string HashAlg)
{
try
{
//Create a new instance of DSACryptoServiceProvider.
DSACryptoServiceProvider DSA = new DSACryptoServiceProvider();

//Import the key information.


DSA.ImportParameters(DSAKeyInfo);

//Create an DSASignatureFormatter object and pass it the


//DSACryptoServiceProvider to transfer the private key.
DSASignatureFormatter DSAFormatter = new DSASignatureFormatter(DSA);

//Set the hash algorithm to the passed value.


DSAFormatter.SetHashAlgorithm(HashAlg);

//Create a signature for HashValue and return it.


return DSAFormatter.CreateSignature(HashToSign);
}
catch(CryptographicException e)
{Console.WriteLine(e.Message);return null;}
}

VB.NET:
Imports System
Imports System.Security.Cryptography

Friend Class DSACSPSample

Shared Sub Main()


Try
'Create a new instance of DSACryptoServiceProvider to generate
'a new key pair.
Dim DSA As DSACryptoServiceProvider = New
DSACryptoServiceProvider()

'The hash value to sign.


Dim HashValue As Byte() = {59, 4, 248, 102, 77, 97, 142, 201, 210,
12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135}
'The value to hold the signed value.
Dim SignedHashValue As Byte() = DSASignHash(HashValue,
DSA.ExportParameters(True), "SHA1")

'Verify the hash and display the results.


If DSAVerifyHash(HashValue, SignedHashValue,
DSA.ExportParameters(False), "SHA1") Then
Console.WriteLine("The hash value was verified.")
Else

152
Console.WriteLine("The hash value was not verified.")
End If
Catch e As ArgumentNullException
Console.WriteLine(e.Message)
End Try
End Sub
Public Shared Function DSASignHash(ByVal HashToSign As Byte(), ByVal
DSAKeyInfo As DSAParameters, ByVal HashAlg As String) As Byte()
Try
'Create a new instance of DSACryptoServiceProvider.
Dim DSA As DSACryptoServiceProvider = New
DSACryptoServiceProvider()

'Import the key information.


DSA.ImportParameters(DSAKeyInfo)

'Create an DSASignatureFormatter object and pass it the


'DSACryptoServiceProvider to transfer the private key.
Dim DSAFormatter As DSASignatureFormatter = New
DSASignatureFormatter(DSA)

'Set the hash algorithm to the passed value.


DSAFormatter.SetHashAlgorithm(HashAlg)

'Create a signature for HashValue and return it.


Return DSAFormatter.CreateSignature(HashToSign)
Catch e As CryptographicException
Console.WriteLine(e.Message)
Return Nothing
End Try
End Function

C #:
public static bool DSAVerifyHash(byte[] HashValue, byte[] SignedHashValue,
DSAParameters DSAKeyInfo, string HashAlg)
{
try
{
//Create a new instance of DSACryptoServiceProvider.
DSACryptoServiceProvider DSA = new DSACryptoServiceProvider();

//Import the key information.


DSA.ImportParameters(DSAKeyInfo);

//Create an DSASignatureDeformatter object and pass it the


//DSACryptoServiceProvider to transfer the private key.
DSASignatureDeformatter DSADeformatter = new
DSASignatureDeformatter(DSA);

//Set the hash algorithm to the passed value.

153
DSADeformatter.SetHashAlgorithm(HashAlg);

//Verify signature and return the result.


return DSADeformatter.VerifySignature(HashValue, SignedHashValue);
}
catch(CryptographicException e){Console.WriteLine(e.Message);return
false;}}}

VB.NET:
Public Shared Function DSAVerifyHash)ByVal HashValue As Byte ،()ByVal
SignedHashValue As Byte ،()ByVal DSAKeyInfo As DSAParameters ،ByVal
HashAlg As String (As Boolean
Try
'Create a new instance of DSACryptoServiceProvider.
Dim DSA As DSACryptoServiceProvider = New DSACryptoServiceProvider()

'Import the key information .


DSA.ImportParameters(DSAKeyInfo(

'Create an DSASignatureDeformatter object and pass it the


'DSACryptoServiceProvider to transfer the private key.
Dim DSADeformatter As DSASignatureDeformatter = New
DSASignatureDeformatter(DSA(

'Set the hash algorithm to the passed value.


DSADeformatter.SetHashAlgorithm(HashAlg(

'Verify signature and return the result .


Return DSADeformatter.VerifySignature(HashValue, SignedHashValue(
Catch e As CryptographicException
Console.WriteLine(e.Message(
Return False
End Try
End Function

154
2- RSACryptoServiceProvider
gh non inherited Class 1‫ وه‬Du/"* +‫ ا‬+T'"‫ ا‬Ch‫ و‬+T'"‫اء ا‬+H‫ إ‬gh ‫و;ﺱ"!م‬
1" C‫ وذ‬RSACryptoServiceProvider ‫ ال‬B* ;H instance Ð': ‫ف‬1# (;‫ا&ا‬
CT$ 3-"‫ﺱ‬/‫م ا‬1,; 3u B*‫( و‬#+‫ ا‬I* ‫م‬.‫"ح ا‬T/‫¨ ا‬h+‫م وا!ص و‬.‫"ح ا‬T/‫ا‬
:g"‫ ا‬D%'‫ ا‬gh /‫ آ‬3"P‫"ح ا!ص و‬T/‫"!ام ا‬#$ (#+‫ا‬

: RSA Algorithm ‫"!ام ال‬#$ +T'"‫ ا‬Ch‫ و‬+T'"‫( ا‬,;+O g‫ﺡ‬k1P ‫ل‬t* :‫وه‬
C #:
using System;
using System.Security.Cryptography;
using System.Text;

class RSACSPSample
{

static void Main()


{
try
{
//Create a UnicodeEncoder to convert between byte array and string.
UnicodeEncoding ByteConverter = new UnicodeEncoding();

//Create byte arrays to hold original, encrypted, and decrypted data.


byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt");
byte[] encryptedData;
byte[] decryptedData;

//Create a new instance of RSACryptoServiceProvider to generate


//public and private key data.
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

//Pass the data to ENCRYPT, the public key information


//(using RSACryptoServiceProvider.ExportParameters(false),
//and a boolean flag specifying no OAEP padding.

155
encryptedData = RSAEncrypt(dataToEncrypt,RSA.ExportParameters(false),
false);

//Pass the data to DECRYPT, the private key information


//(using RSACryptoServiceProvider.ExportParameters(true),
//and a boolean flag specifying no OAEP padding.
decryptedData = RSADecrypt(encryptedData,RSA.ExportParameters(true),
false);

//Display the decrypted plaintext to the console.


Console.WriteLine("Decrypted plaintext: {0}",
ByteConverter.GetString(decryptedData));
}
catch(ArgumentNullException) {Console.WriteLine("Encryption failed.");}
}

VB.NET:
Imports System
Imports System.Security.Cryptography
Imports System.Text

Friend Class RSACSPSample

Shared Sub Main()


Try
'Create a UnicodeEncoder to convert between byte array and string.
Dim ByteConverter As UnicodeEncoding = New UnicodeEncoding()

'Create byte arrays to hold original, encrypted, and decrypted data.


Dim dataToEncrypt As Byte() = ByteConverter.GetBytes("Data to
Encrypt")
Dim encryptedData As Byte()
Dim decryptedData As Byte()

'Create a new instance of RSACryptoServiceProvider to generate


'public and private key data.
Dim RSA As RSACryptoServiceProvider = New
RSACryptoServiceProvider()

'Pass the data to ENCRYPT, the public key information


'(using RSACryptoServiceProvider.ExportParameters(false),
'and a boolean flag specifying no OAEP padding.
encryptedData = RSAEncrypt(dataToEncrypt,
RSA.ExportParameters(False), False)

'Pass the data to DECRYPT, the private key information


'(using RSACryptoServiceProvider.ExportParameters(true),
'and a boolean flag specifying no OAEP padding.
decryptedData = RSADecrypt(encryptedData,
RSA.ExportParameters(True), False)

156
'Display the decrypted plaintext to the console.
Console.WriteLine("Decrypted plaintext: {0}",
ByteConverter.GetString(decryptedData))
Catch e1 As ArgumentNullException
Console.WriteLine("Encryption failed.")
End Try
End Sub

:p‫ ا‬0= ‫م‬. p ‫د ا‬.3


‫=© ا‬
C #:
static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters
RSAKeyInfo, bool DoOAEPPadding)
{
try{
//Create a new instance of RSACryptoServiceProvider.
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

//Import the RSA Key information. This only needs


//to include the public key information.
RSA.ImportParameters(RSAKeyInfo);

//Encrypt the passed byte array and specify OAEP padding.


//OAEP padding is only available on Microsoft Windows XP or
//later.
return RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
}
//Catch and display a CryptographicException
//to the console.
catch(CryptographicException e){Console.WriteLine(e.Message);return null;}
}

VB.NET:
Shared Public Function RSAEncrypt)ByVal DataToEncrypt As Byte ،()ByVal
RSAKeyInfo As RSAParameters ،ByVal DoOAEPPadding As Boolean (As Byte()
Try
'Create a new instance of RSACryptoServiceProvider.
Dim RSA As RSACryptoServiceProvider = New RSACryptoServiceProvider()
'Import the RSA Key information. This only needs
'to include the public key information.
RSA.ImportParameters(RSAKeyInfo(
'Encrypt the passed byte array and specify OAEP padding .
'OAEP padding is only available on Microsoft Windows XP or
'later .
Return RSA.Encrypt(DataToEncrypt, DoOAEPPadding(
'Catch and display a CryptographicException
'to the console.
Catch e As CryptographicException
Console.WriteLine(e.Message(
Return Nothing
End Try
End Function

157
:p‫ ا‬0=' š0 ‫م‬. p ‫د ا‬.3
‫=© ا‬

C #:
static public byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters
RSAKeyInfo,bool DoOAEPPadding)
{
try
{
//Create a new instance of RSACryptoServiceProvider.
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//Import the RSA Key information. This needs
//to include the private key information.
RSA.ImportParameters(RSAKeyInfo);

//Decrypt the passed byte array and specify OAEP padding.


//OAEP padding is only available on Microsoft Windows XP or
//later.
return RSA.Decrypt(DataToDecrypt, DoOAEPPadding);
}
//Catch and display a CryptographicException
//to the console.
catch(CryptographicException e){Console.WriteLine(e.ToString());return null;}
}}

VB.NET:
Shared Public Function RSADecrypt)ByVal DataToDecrypt As Byte ،()ByVal
RSAKeyInfo As RSAParameters ،ByVal DoOAEPPadding As Boolean (As Byte()
Try
'Create a new instance of RSACryptoServiceProvider.
Dim RSA As RSACryptoServiceProvider = New RSACryptoServiceProvider()
'Import the RSA Key information. This needs
'to include the private key information.
RSA.ImportParameters(RSAKeyInfo(

'Decrypt the passed byte array and specify OAEP padding .


'OAEP padding is only available on Microsoft Windows XP or
'later .
Return RSA.Decrypt(DataToDecrypt, DoOAEPPadding(
'Catch and display a CryptographicException
'to the console.
Catch e As CryptographicException
Console.WriteLine(e.ToString(()
Return Nothing
End Try
End Function

158
‫ ا&ت إذ‬+T'" ()*+&‫† ا‬#2‫ى ا‬19‫ أ‬1‫ وه‬:Hashing algorithms -C
Message ‫"!ام‬#$ 128 bits B* e$ <S9‫ آﺡ أ‬512 bits algorithm ‫ﻩ‬h ‫;ﺱ"!م‬
i"‫ إ< ﺡ‬iKH‫( وإر‬#+‫ ا‬+T'P Ch IO"‫ﺱ‬P B :‫ وه‬MAC Digest Algorithms
(/9+‫ ا‬I9‫ا‬1"‫ ا‬1P gh‫ و‬Passwords ‫ ال‬1" g##‫ أ‬D%'$ ‫( و;ﺱ"!م‬,$‫اﺱ‬
‫ ال‬gh Password ‫ور‬+/‫( ا‬/-‫ آ‬B;w!" ‫ﺱ"!م‬P ‫ت‬e‫† اﺡ‬-d‫ ا‬gh‫ و‬Digital Signature
.B*‫ ا‬D%'$ Database
‫وال‬SHA384Managed ‫ وال‬SHA256Managed ‫ و ال‬SHA1Managed ‫و;ﺱ"!م ال‬
ComputeHash Method ‫ﻩ ﺱ"!م ال‬:*‫ و‬Hash Object ‹;+." SHA512Managed
:‫ل‬t/‫ آ‬g-; /‫ وآ‬byte Array gh ‫ﻩ‬:;w!P‫ و‬hash code ‫ ال‬1"
C #:
SHA1Managed shaM1 = new SHA1Managed ();
byte[] my_kay1= ASCIIEncoding.ASCII.GetBytes("convert this text to hash
code");
byte[] hashed_kay1 = shaM1.ComputeHash(my_kay1);
MessageBox.Show(ASCIIEncoding.ASCII.GetString(hashed_kay1));

SHA256Managed shaM2 = new SHA256Managed();


byte[] my_kay2= ASCIIEncoding.ASCII.GetBytes("convert this text to hash
code");
byte[] hashed_kay2 = shaM2.ComputeHash(my_kay2);
MessageBox.Show(ASCIIEncoding.ASCII.GetString(hashed_kay2));

SHA384Managed shaM3 = new SHA384Managed ();


byte[] my_kay3= ASCIIEncoding.ASCII.GetBytes("convert this text to hash
code");
byte[] hashed_kay3 = shaM3.ComputeHash(my_kay3);
MessageBox.Show(ASCIIEncoding.ASCII.GetString(hashed_kay3));

SHA512Managed shaM4 = new SHA512Managed ();


byte[] my_kay4= ASCIIEncoding.ASCII.GetBytes("convert this text to hash
code");
byte[] hashed_kay4 = shaM4.ComputeHash(my_kay4);
MessageBox.Show(ASCIIEncoding.ASCII.GetString(hashed_kay4));

VB.NET:
Dim shaM1 As SHA1Managed = New SHA1Managed
Dim my_kay1 As Byte() = ASCIIEncoding.ASCII.GetBytes("convert this text to
hash code")
Dim hashed_kay1 As Byte() = shaM1.ComputeHash(my_kay1)
Msgbox(ASCIIEncoding.ASCII.GetString(hashed_kay1))
Dim shaM2 As SHA256Managed = New SHA256Managed
Dim my_kay2 As Byte() = ASCIIEncoding.ASCII.GetBytes("convert this text to
hash code")
Dim hashed_kay2 As Byte() = shaM2.ComputeHash(my_kay2)
Msgbox(ASCIIEncoding.ASCII.GetString(hashed_kay2))
Dim shaM3 As SHA384Managed = New SHA384Managed
Dim my_kay3 As Byte() = ASCIIEncoding.ASCII.GetBytes("convert this text to
hash code")
Dim hashed_kay3 As Byte() = shaM3.ComputeHash(my_kay3)
Msgbox(ASCIIEncoding.ASCII.GetString(hashed_kay3))

159
Dim shaM4 As SHA512Managed = New SHA512Managed
Dim my_kay4 As Byte() = ASCIIEncoding.ASCII.GetBytes("convert this text to
hash code")
Dim hashed_kay4 As Byte() = shaM4.ComputeHash(my_kay4)
Msgbox(ASCIIEncoding.ASCII.GetString(hashed_kay4))

: Permission Namespace Overview : k

‫ ال‬g‫ﺡت وه‬oS‫ ا‬B* ‫اع‬1‫( أ‬uou  ‫ اوت‬gh Permission Namespace ‫ ال‬3KP‫و‬
... Role- based permissions ‫ وال‬Identity Permissions ‫ وال‬Socket permissions

gh Socket ‫"!ام ال‬#‫ﺡت ا‬o‫ﺡ; ﺹ‬P B* C:%/P‫ و‬:Socket Permission


B/k SocketPermissionAttribute ‫ و‬SocketPermission ‫"!ام‬#$ ‫ت‬%&'‫*)ت ا‬+$
IO"‫ل ﺱ‬t/‫ وآ‬System.Security.Permissions Namespaces ‫ وال‬System.Net ‫ال‬
C‫ ذ‬3";‫ و‬، Listener Application ‫ ال‬I* ‫ل‬SPe‫ ا‬B* B.* Client Host Address I:*
‫ان‬1:K ‫ و‬Access Kind ‫( وال‬-/.‫ع ا‬1 ih ‫ ﺡد‬SocketPermission Attribute ‹;+."$
‫اء‬1# Transport ‫ع ال‬1‫ و‬Port ‫ ال‬39‫ ور‬Permission ‫ﻩ ال‬-K ¨&O# ‫ي‬7‫ ا‬Host ‫ال‬
.UDP ‫ أو‬TCP ‫ﻩ‬H1* +d ‫ﻩ أو‬H1*

I/H +&K Socket ‫ل‬$ loopback 127.0.0.1 Address‫ل ال‬SP‫ ا‬I:* ‫ل‬t/‫ا ا‬7‫ ه‬gh ;+
.‫ﺱ"!م‬/‫ ا‬Socket ‫ع ال‬1 BK +^:‫‡ ا‬$‫ و‬Ports ‫ال‬

[SocketPermission(SecurityAction.Deny, Access="Connect",
Host="127.0.0.1",Port="All", Transport="All")]

:g-; /‫;ه وآ‬+ g"‫( ا‬-/.‫ع ا‬1 ;‫ﺡ‬P B* SecurityAction object‫ ال‬::%/;

‫( *ﺡدة‬-/K ‫اء‬+H‫ إ‬B* B.* Client Host ‫ح‬/‫ اﺱ‬g:.P‫ و‬:Assert
‫( ال‬,O:* gh I,P g"‫ ا‬Classes ‫ ال‬I/H <-K ‫ﺡت‬oS‫&¨ ا‬OP g:.P‫ و‬:Demand
Defined Abstract ‫< ال‬-K‫ أ‬Stack
.(:.* (-/K ‫اء‬+H‫ إ‬B* Client Host ‫ ال‬I:* g:.P‫ و‬:Deny
‫ث ال‬+# ‫ي‬7‫ ا‬Class ‫< ال‬-K ‫ﺡت‬oS‫&¨ ا‬OP ih‫ و‬: InheritanceDemand
.g‫ اﺡ‬Class
.‫ﺡد‬/‫ ا‬Client User ‫ا ال‬K Access ‫ ال‬I/H I:/; ‫ﻩ‬h‫ و‬:PermitOnly
...

160
: /‫ ه‬B;‫ر‬j 7jGP‫ح و‬/‫ أو اﺱ‬I:/‫( ا‬-/K ‫ع‬1 ‫ ﺡد‬Access property‫ ال‬gh‫و‬

‫ و ال‬IP Address ‫ ال‬I* Binding D/K B* Client Socket ‫ح ل‬/‫ أو اﺱ‬I:/ Accept
.‫ﺡد‬/‫ ا‬Port
Remote Host ‫ ال‬I* connect D/K B* Client Socket ‫ح ل‬/‫ أو اﺱ‬I:/ Connect
.‫ﺡد‬/‫ا‬

39‫ و ر‬Permission ‫ﻩ ال‬-K ¨&O# ‫ي‬7‫ ا‬Host ‫ان ال‬1:K ‫ ﺡد‬Port ‫ وال‬Host ‫ ال‬gh
<-K (e all (/-‫ آ‬+;+/P IO"‫ ﺱ‬Port property ‫ ال‬gh ) i$ DS"; g"‫ ا‬Port ‫ال‬
( Ports ‫ ال‬I/H <-K (‫ﺡ‬oS‫&¨ ا‬OP

‫ﺱ"!م‬/‫ ا‬Socket ‫ع ال‬1 ih ‫ف‬+.:# g"‫ وا‬Transport property ‫ا ﺡد ال‬+j‫وأ‬
:("‫ ا!رات ا‬7jGP‫و‬
Socket ‫ ال‬I/H <-K Permession ‫‰ ال‬7‫&¨ ه‬OP ‫ إذ‬Socket ‫ع ال‬1 ;‫ﺡ‬P ‫ون‬$ All
.Types
‫ل‬t/‫ وآ‬Datagram Protocols ‫ﺱ"!م‬P Socket ‫ إذا آ ال‬Connectionless
.UDP ‫ل‬1‫آ‬1P‫و‬+$
‫ل‬t/‫ وآ‬Oriented Protocols ‫ﺱ"!م‬P Socket ‫ إذا آ ال‬ConnectionOriented
.TCP ‫ل‬1‫آ‬1P‫و‬+$
.‫ة‬+V&* ‰;‫ﺡ‬P IO"‫ﺱ‬P ‫ إذ‬TCP
.‫ة‬+V&* ‰;‫ﺡ‬P IO"‫ﺱ‬P ‫ إذ‬UDP

‫ و  ال‬Permission Namespace ‫ ال‬o‫ﺹ‬0' ‫ ƒح آ‬5# '& ‫ف‬.p


.‫ *] اب‬1‫ر‬.‫  ا ا‬Security Namespaces

161
The End of ebook

‫وﻥ‬0‫ی ا  ا‬I‫ﻥ‬

‫ت وا
ا‬0‫ﺱ
ف ' ا  ا‬
 ‫ ; دد أ(ا‬، ‫ا'یة  ا  ا
ر‬
...I)!J

Copyrighted to: Mr. FADI Abdel-qader, Jordan


Fadi822000@yahoo.com
http://spaces.msn.com/members/csharp2005

162

You might also like