<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>programming &#8211; Naseef Chowdhury</title>
	<atom:link href="https://naseefchowdhury.me/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>https://naseefchowdhury.me</link>
	<description>Senior Software Engineer</description>
	<lastBuildDate>Fri, 26 Jul 2024 12:44:03 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://naseefchowdhury.me/wp-content/uploads/2019/04/cropped-003-ads-32x32.png</url>
	<title>programming &#8211; Naseef Chowdhury</title>
	<link>https://naseefchowdhury.me</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>IP/TCP Programming for Beginners Using C++</title>
		<link>https://naseefchowdhury.me/ip-tcp-programming-for-beginners-usi/</link>
					<comments>https://naseefchowdhury.me/ip-tcp-programming-for-beginners-usi/#respond</comments>
		
		<dc:creator><![CDATA[Naseef Chowdhury]]></dc:creator>
		<pubDate>Fri, 26 Jul 2024 12:44:03 +0000</pubDate>
				<category><![CDATA[Data]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[IT and Technology]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software Development]]></category>
		<guid isPermaLink="false">https://naseefchowdhury.me/?p=3449</guid>

					<description><![CDATA[IP/TCP programming is fundamental for creating networked applications, from simple chat programs to sophisticated web servers. Modern C++ offers robust features that simplify network programming. This guide will help you start with IP/TCP programming for beginners using C++. Prerequisites Before diving into the code, make sure you have a basic understanding of C++ and have [&#8230;]]]></description>
										<content:encoded><![CDATA[<h5 id="c034" class="pw-post-body-paragraph mg mh gt mi b mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd gm bj">IP/TCP programming is fundamental for creating networked applications, from simple chat programs to sophisticated web servers. Modern C++ offers robust features that simplify network programming. This guide will help you start with IP/TCP programming for beginners <span style="color: #0000ff;"><a style="color: #0000ff;" href="https://naseefchowdhury.me/2024/05/18/is-rust-set-to-replace-c-in-the-near-future/">using C++</a></span>.</h5>
<h2 id="5436" class="ne nf gt be ng nh ni dx nj nk nl dz nm mr nn no np mv nq nr ns mz nt nu nv nw bj" data-selectable-paragraph="">Prerequisites</h2>
<p id="b1d8" class="pw-post-body-paragraph mg mh gt mi b mj nx ml mm mn ny mp mq mr nz mt mu mv oa mx my mz ob nb nc nd gm bj" data-selectable-paragraph="">Before diving into the code, make sure you have a basic understanding of C++ and have your development environment set up. You’ll need a C++ compiler that supports C++11 or later.</p>
<h2 id="7288" class="ne nf gt be ng nh ni dx nj nk nl dz nm mr nn no np mv nq nr ns mz nt nu nv nw bj" data-selectable-paragraph="">Setting Up Your Environment&nbsp;</h2>
<p id="5a7a" class="pw-post-body-paragraph mg mh gt mi b mj nx ml mm mn ny mp mq mr nz mt mu mv oa mx my mz ob nb nc nd gm bj" data-selectable-paragraph="">Ensure you have a compiler installed, such as GCC or Clang on Linux, or Visual Studio on Windows. We’ll be using standard C++ libraries, so no additional libraries are required.</p>
<h2 id="0fb2" class="ne nf gt be ng nh ni dx nj nk nl dz nm mr nn no np mv nq nr ns mz nt nu nv nw bj" data-selectable-paragraph="">Creating a Simple TCP Server</h2>
<p id="e9bf" class="pw-post-body-paragraph mg mh gt mi b mj nx ml mm mn ny mp mq mr nz mt mu mv oa mx my mz ob nb nc nd gm bj" data-selectable-paragraph=""><span style="color: #0000ff;"><a style="color: #0000ff;" href="https://naseefchowdhury.me/2024/07/18/transformative-large-language-models/">Let’s start by creating a simple TCP server</a></span>. This server will listen for incoming connections and echo any received messages back to the client.</p>
<table style="width: 100%; border-collapse: collapse; background-color: #f5ebeb;">
<tbody>
<tr>
<td style="width: 100%;"><span class="hljs-meta" style="color: #ff6600;"><span style="color: #ff00ff;">#<span class="hljs-keyword">include</span></span> <span class="hljs-string">&lt;iostream&gt;</span></span><br />
<span class="hljs-meta" style="color: #ff6600;"><span class="hljs-keyword" style="color: #ff00ff;"><span style="color: #ff00ff;">#</span>include</span> <span class="hljs-string">&lt;string&gt;</span></span><br />
<span class="hljs-meta" style="color: #ff6600;"><span class="hljs-keyword" style="color: #ff00ff;"><span style="color: #ff00ff;">#</span>include </span><span class="hljs-string">&lt;memory&gt;</span></span><br />
<span class="hljs-meta" style="color: #ff6600;"><span class="hljs-keyword" style="color: #ff00ff;"><span style="color: #ff00ff;">#</span>include </span><span class="hljs-string">&lt;cstring&gt;</span></span><br />
<span class="hljs-meta" style="color: #ff6600;"><span class="hljs-keyword" style="color: #ff00ff;"><span style="color: #ff00ff;">#</span>include </span><span class="hljs-string">&lt;sys/types.h&gt;</span></span><br />
<span class="hljs-meta" style="color: #ff6600;"><span style="color: #ff00ff;"><span class="hljs-keyword">#include</span></span> <span class="hljs-string">&lt;sys/socket.h&gt;</span></span><br />
<span class="hljs-meta" style="color: #ff6600;"><span class="hljs-keyword" style="color: #ff00ff;"><span style="color: #ff00ff;">#</span>include </span><span class="hljs-string">&lt;netinet/in.h&gt;</span></span><br />
<span class="hljs-meta" style="color: #ff6600;"><span class="hljs-keyword" style="color: #ff00ff;"><span style="color: #ff00ff;">#</span>include </span><span class="hljs-string">&lt;unistd.h&gt;</span></span><span class="hljs-keyword">constexpr</span> <span class="hljs-type">int</span> PORT = <span style="color: #ff00ff;"><span class="hljs-number">8080</span>;</span><br />
<span class="hljs-keyword">constexpr</span> <span class="hljs-type">int</span> BUFFER_SIZE = <span class="hljs-number" style="color: #ff00ff;">1024</span>;</p>
<p><span class="hljs-function" style="color: #0000ff;"><span class="hljs-type">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{<br />
<span class="hljs-type">int</span> server_fd, new_socket;<br />
<span class="hljs-keyword" style="color: #ff0000;">struct</span> <span class="hljs-title.class">sockaddr_in</span> address;<br />
<span class="hljs-type">int</span> opt = <span class="hljs-number" style="color: #0000ff;">1</span>;<br />
<span class="hljs-type">socklen_t</span> addrlen = <span class="hljs-built_in">sizeof</span>(address);<br />
<span class="hljs-type">char</span> buffer[BUFFER_SIZE] = {<span class="hljs-number">0</span>};<br />
<span class="hljs-comment" style="color: #008080;">// Creating socket file descriptor</span><br />
<span class="hljs-keyword">if</span> ((server_fd = <span class="hljs-built_in">socket</span>(AF_INET, SOCK_STREAM, <span class="hljs-number">0</span>)) == <span class="hljs-number">0</span>) {<br />
<span style="color: #ff9900;"><span class="hljs-built_in">perror</span>(</span><span class="hljs-string">&#8220;socket failed&#8221;</span>);<br />
<span class="hljs-built_in">exit</span>(EXIT_FAILURE);<br />
}<br />
<span class="hljs-comment" style="color: #008080;">// Forcefully attaching socket to the port 8080</span><br />
<span class="hljs-keyword">if</span> (<span class="hljs-built_in">setsockopt</span>(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &amp;opt, <span class="hljs-built_in">sizeof</span>(opt))) {<br />
<span class="hljs-built_in">perror</span>(<span class="hljs-string">&#8220;setsockopt&#8221;</span>);<br />
<span class="hljs-built_in">exit</span>(EXIT_FAILURE);<br />
}<br />
address.sin_family = AF_INET;<br />
address.sin_addr.s_addr = INADDR_ANY;<br />
address.sin_port = <span class="hljs-built_in">htons</span>(PORT);<br />
<span class="hljs-comment" style="color: #008080;">// Bind the socket to the network address and port</span><br />
<span class="hljs-keyword">if</span> (<span class="hljs-built_in">bind</span>(server_fd, (<span class="hljs-keyword">struct</span> sockaddr*)&amp;address, <span class="hljs-built_in">sizeof</span>(address)) &lt; <span class="hljs-number">0</span>) {<br />
<span class="hljs-built_in">perror</span>(<span class="hljs-string">&#8220;bind failed&#8221;</span>);<br />
<span class="hljs-built_in">exit</span>(EXIT_FAILURE);<br />
}<br />
<span class="hljs-comment" style="color: #008080;">// Start listening for incoming connections</span><br />
<span class="hljs-keyword">if</span> (<span class="hljs-built_in">listen</span>(server_fd, <span class="hljs-number">3</span>) &lt; <span class="hljs-number">0</span>) {<br />
<span class="hljs-built_in">perror</span>(<span class="hljs-string">&#8220;listen&#8221;</span>);<br />
<span class="hljs-built_in">exit</span>(EXIT_FAILURE);<br />
}<br />
std::cout &lt;&lt; <span class="hljs-string">&#8220;Server listening on port &#8220;</span> &lt;&lt; PORT &lt;&lt; std::endl;<br />
<span class="hljs-comment" style="color: #008080;">// Accept incoming connection</span><br />
<span class="hljs-keyword">if</span> ((new_socket = <span class="hljs-built_in">accept</span>(server_fd, (<span class="hljs-keyword">struct</span> sockaddr*)&amp;address, &amp;addrlen)) &lt; <span class="hljs-number">0</span>) {<br />
<span class="hljs-built_in">perror</span>(<span class="hljs-string">&#8220;accept&#8221;</span>);<br />
<span class="hljs-built_in">exit</span>(EXIT_FAILURE);<br />
}<br />
<span class="hljs-comment" style="color: #008080;">// Read and echo the received message</span><br />
<span class="hljs-type">ssize_t</span> valread = <span class="hljs-built_in">read</span>(new_socket, buffer, BUFFER_SIZE);<br />
std::cout &lt;&lt; <span class="hljs-string">&#8220;Received: &#8220;</span> &lt;<span style="color: #ff6600;">&lt; buffer &lt;&lt; std::endl;</span><br />
<span class="hljs-built_in">send</span>(new_socket, buffer, valread, <span class="hljs-number">0</span>);<br />
std::cout &lt;&lt; <span class="hljs-string">&#8220;Echo message sent&#8221;</span> &lt;&lt; std::endl;<br />
<span class="hljs-comment" style="color: #008080;">// Close the socket</span><br />
<span class="hljs-built_in">close</span>(new_socket);<br />
<span class="hljs-built_in">close</span>(server_fd);<br />
<span class="hljs-keyword" style="color: #0000ff;">return </span><span class="hljs-number">0</span>;<br />
}</td>
</tr>
</tbody>
</table>
<p data-selectable-paragraph=""><strong>Creating a Simple TCP Client&nbsp;</strong><br />
Next, let’s create a simple TCP client that connects to the server and sends a message.</p>
<table style="width: 100%; border-collapse: collapse; background-color: #ffebeb;">
<tbody>
<tr>
<td style="width: 100%;"><span style="color: #ff00ff;">#include</span><span style="color: #ff6600;"> &lt;iostream&gt;</span><br />
<span style="color: #ff00ff;">#include</span> <span style="color: #ff6600;">&lt;string&gt;</span><br />
<span style="color: #ff00ff;">#include</span> <span style="color: #ff6600;">&lt;memory&gt;</span><br />
<span style="color: #ff00ff;">#include</span> <span style="color: #ff6600;">&lt;cstring&gt;</span><br />
<span style="color: #ff00ff;">#include</span> <span style="color: #ff6600;">&lt;sys/types.h&gt;</span><br />
<span style="color: #ff00ff;">#include</span> <span style="color: #ff6600;">&lt;sys/socket.h&gt;</span><br />
<span style="color: #ff00ff;">#include</span> <span style="color: #ff6600;">&lt;netinet/in.h&gt;</span><br />
<span style="color: #ff00ff;">#include</span> <span style="color: #ff6600;">&lt;arpa/inet.h&gt;</span><br />
<span style="color: #ff00ff;">#include</span> <span style="color: #ff6600;">&lt;unistd.h&gt;</span>constexpr int PORT =<span style="color: #3366ff;"> 8080</span>;<br />
constexpr int BUFFER_SIZE = <span style="color: #3366ff;">1024</span>;<br />
int main() {<br />
int sock = 0;<br />
struct sockaddr_in serv_addr;<br />
char buffer[<span style="color: #ff00ff;">BUFFER_SIZE</span>] = {0};<br />
<span style="color: #008080;">// Creating socket file descriptor</span><br />
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) &lt; 0) {<br />
std::cerr &lt;&lt; &#8220;Socket creation error&#8221; &lt;&lt; std::endl;<br />
return -1;<br />
}<br />
serv_addr.sin_family = AF_INET;<br />
serv_addr.sin_port = htons(PORT);<br />
<span style="color: #008080;">// Convert IPv4 and IPv6 addresses from text to binary form</span><br />
if (inet_pton(AF_INET, &#8220;127.0.0.1&#8221;, &amp;serv_addr.sin_addr) &lt;= 0) {<br />
std::cerr &lt;&lt; &#8220;<span style="color: #ff0000;">Invalid address/ Address not supported</span>&#8221; &lt;&lt; std::endl;<br />
return -1;<br />
}<br />
<span style="color: #008080;">// Connect to the server</span><br />
if (connect(sock, (struct sockaddr*)&amp;serv_addr, sizeof(serv_addr)) &lt; 0) {<br />
std::cerr &lt;&lt; &#8220;<span style="color: #ff0000;">Connection Failed</span>&#8221; &lt;&lt; std::endl;<br />
return -1;<br />
}<br />
std::string hello = &#8220;Hello from client&#8221;;<br />
send(sock, hello.c_str(), hello.size(), 0);<br />
std::cout &lt;&lt; &#8220;<span style="color: #ff0000;">Hello message sent</span>&#8221; &lt;&lt; std::endl;<br />
ssize_t valread = <span style="color: #3366ff;">read</span>(sock, buffer, BUFFER_SIZE);<br />
std::cout &lt;&lt; &#8220;Received: &#8221; &lt;&lt; buffer &lt;&lt; std::endl;<br />
<span style="color: #008080;">// Close the socket</span><br />
close(sock);<br />
<span style="color: #ff6600;">return 0;</span><br />
}</td>
</tr>
</tbody>
</table>
<h2>Explanation of the Code</h2>
<h3>Socket Creation:</h3>
<p><span style="color: #0000ff;"><a style="color: #0000ff;" href="https://naseefchowdhury.me/">Both the server and client create a socket using the&nbsp;socket&nbsp;function, specifying the address family (AF_INET&nbsp;for IPv4), the socket type (SOCK_STREAM&nbsp;for TCP), and the protocol (0&nbsp;to use the default protocol for the given socket type).</a></span></p>
<p data-selectable-paragraph="">&nbsp;</p>
<p data-selectable-paragraph=""><img fetchpriority="high" decoding="async" class="aligncenter wp-image-3450 size-full" src="https://naseefchowdhury.me/wp-content/uploads/2024/07/1_YD439P2R3Zgt_WOy6e3Jng.webp" alt="Programming for Beginners" width="330" height="375"></p>
<p data-selectable-paragraph="">&nbsp;</p>
<h2>Server Binding and Listening:</h2>
<p>The server sets socket options and binds it to a specific port (<span style="color: #0000ff;">8080</span>).<br />
It then listens for incoming connections with the&nbsp;listen&nbsp;function.</p>
<h3>
Client Connecting:</h3>
<p>The client specifies the server address and port, <span style="color: #0000ff;"><a style="color: #0000ff;" href="https://naseefchowdhury.me/blogs/">converting the IP address to the correct format</a></span> using inet_pton. It then connects to the server using the&nbsp;connect&nbsp;function.</p>
<h3>
<span style="color: #0000ff;"><a style="color: #0000ff;" href="https://en.wikipedia.org/wiki/Data_communication" target="_blank" rel="noopener">Data Transmission:</a></span></h3>
<p>The client sends a message to the server.<br />
The server reads the message, prints it, and sends the same message back to the client (echo).<br />
The client reads the echoed message and prints it.</p>
<h3>
Socket Closure:</h3>
<p>Both the server and client close their sockets after communication is done to free up resources.<br />
Running the Code<br />
Compile the server and client programs using your <span style="color: #0000ff;"><a style="color: #0000ff;" href="https://naseefchowdhury.me/2024/06/28/the-negative-impact-of-large-language-models/">C++ compiler</a></span>.</p>
<p><strong>g++ -std=c++11 -o server server.cpp </strong><br />
<strong>g++ -std=c++11 -o client client.cpp</strong></p>
<p>Run the server program first.</p>
<p>./server</p>
<p>In another terminal, run the client program.</p>
<p>./client</p>
<p>You should see the server receiving the message from the client and echoing it back.</p>
<h2>Conclusion</h2>
<p>This guide briefly introduced IP/TCP programming for beginners using modern C++. By leveraging the standard library and<span style="color: #0000ff;"><a style="color: #0000ff;" href="https://naseefchowdhury.me/2024/07/11/negative-impact-of-large-language-models/"> C++ features</a></span>, you can create efficient and maintainable networked applications. While this example uses basic socket programming, more advanced applications may benefit from higher-level libraries. However, understanding the fundamentals empowers you to build more complex and robust networked systems. Happy coding!</p>
<h4>References<br />
<a href="https://www.geeksforgeeks.org/tcp-server-client-implementation-in-c/" target="_blank" rel="noopener"><span style="color: #0000ff;">https://www.geeksforgeeks.org/tcp-server-client-implementation-in-c/</span></a></h4>
]]></content:encoded>
					
					<wfw:commentRss>https://naseefchowdhury.me/ip-tcp-programming-for-beginners-usi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
