TCP/IP Protocol in Half Duplex Mode using C/C++

by Angelos on November 14, 2009

TCP/IP is the oldest and by far the most popular protocol used for communication on Internet. I implemented this protocol during my internship. It is advised to implement UDP/IP protocol first then implementing TCP/IP protocol as the former is easier to implement. The code for TCP/IP in half duplex mode is as follow.

TCP/IP Sender

#include <Winsock2.h>
#include<stdio.h>
#include<iostream.h>

#define APP_PORT        4020
#define REMOTE_SYSTEM    "192.168.1.113"

void main()
{
int temp=0;
WSADATA w;
WSAStartup(0×0202,&amp;w);

SOCKET sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == INVALID_SOCKET)
{
printf("socket creation failed\n");
return;
}

sockaddr_in to;
to.sin_family= AF_INET;
to.sin_addr.s_addr = inet_addr(REMOTE_SYSTEM);
to.sin_port= htons(APP_PORT);

int nRet=0;

/*nRet = bind(sockfd, (sockaddr*)&amp;to, sizeof(sockaddr)); //bidirectional
if(nRet == SOCKET_ERROR)
{
printf("failed to bind socket %d to ip %s and port %d\n", sockfd, REMOTE_SYSTEM, APP_PORT);
return;
}*/

nRet = connect(sockfd, (sockaddr*)&amp;to, sizeof(sockaddr));
if (nRet == SOCKET_ERROR)
{
printf("Error, cannot connect\n");
temp = WSAGetLastError();
printf("%d",temp);
return;
}

char buffer[7] = "hello!";  // data to be sent

while(1)
{
nRet = send(sockfd, buffer, 7, 0);
if(nRet == SOCKET_ERROR )
{
printf("Data sent failed\n");
temp = WSAGetLastError();
printf("%d",temp);
}
printf("%d bytes sent on ip %s and port %d\n", nRet, REMOTE_SYSTEM, APP_PORT);
Sleep(5000);
}
}

TCP/IP Receiver

#include <Winsock2.h>
#include<stdio.h>
#include<iostream.h>

#define APP_PORT        4020
#define LOCAL_IP        "192.168.1.113"

void main()
{
WSADATA w;
WSAStartup(0×0202,&amp;w);

SOCKET sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == INVALID_SOCKET)
{
printf("socket creation failed\n");
return;
}

int nRet=0;
sockaddr_in local;
local.sin_family= AF_INET;
local.sin_addr.s_addr = inet_addr(LOCAL_IP);
local.sin_port= htons(APP_PORT);

nRet = bind(sockfd, (sockaddr*)&amp;local, sizeof(sockaddr));
if(nRet == SOCKET_ERROR)
{
printf("failed to bind socket %d to ip %s and port %d err code %d\n", sockfd, LOCAL_IP, APP_PORT, WSAGetLastError());
return;
}

nRet = listen( sockfd, 5);
if (nRet == SOCKET_ERROR)
{

printf("Cannot listen to the port %d\n", APP_PORT);
return;
}

char buffer[200];
sockaddr_in from;
int nSize= sizeof(from);

nRet = accept( sockfd, (sockaddr*)&amp;from , &amp;nSize);
if (nRet == INVALID_SOCKET)
{

printf("Invalid incoming connection");
}

sockaddr_in a11;
int na11 = sizeof(a11);

//WSAEventSelect( sockfd, WSAEVENT hEventObject, long lNetworkEvents);

while(1)
{
//Sleep(5000);
nRet = recv(sockfd, buffer, 200, 0);
if(nRet == SOCKET_ERROR )
{
printf("Data failed with error code %d\n", WSAGetLastError());
//    return;
}
printf("%d bytes data recieved from ip %s and port %d\n", nRet, inet_ntoa(from.sin_addr), ntohs(from.sin_port));
}
}

Related Posts

  1. UDP/IP Protocol in Half Duplex Mode using C/C++
  2. Creating & Recording Sound in WAV file using MIMOS with C/C++
blog comments powered by Disqus

Previous post:

Next post: