Skip to content

Instantly share code, notes, and snippets.

@haikentcode
Created March 29, 2015 07:00
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save haikentcode/c1199e87b8c8ca974469 to your computer and use it in GitHub Desktop.
Save haikentcode/c1199e87b8c8ca974469 to your computer and use it in GitHub Desktop.
socket programming in c++
#include <cstdio>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <iostream>
using namespace std;
void msg(const char *msg){
perror(msg);
exit(0);
}
int readLine(int fd, char *buf, size_t n)
{
int s=0;
char ch;
do{
s++;
if(read(fd,&ch,1)>0)
{
*buf++ = ch;
}
}
while(ch!='\n' && s<n);
*buf='\0';
return s;
}
class hkclient{
int s_skt_fd;
int port;
struct hostent *server;
struct sockaddr_in serv_addr;
public:
hkclient(char *argv[]){
port=atoi(argv[2]);
s_skt_fd=socket(AF_INET,SOCK_STREAM,0);
if(s_skt_fd<0) msg("error opening socket");
server=gethostbyname(argv[1]);
if(server<0) msg("error no such host");
serv_addr.sin_family=AF_INET;
bcopy((char *)server->h_addr,(char *)&serv_addr.sin_addr.s_addr,server->h_length);
serv_addr.sin_port=htons(atoi(argv[2]));
cout<<"sockt regist";
}
void conct(){
int b=connect(s_skt_fd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
if(b<0) msg("Error on connecting");
}
void sendMsg(const char *s){
int n=write(s_skt_fd,s,strlen(s));
if(n<0) msg("error in writing msg");
}
char * getMsg(){
char buffer[1024];
int n=readLine(s_skt_fd,buffer,1024);
if(n<0) msg("error in reading msg");
return &buffer[0];
}
};
int main(int argc,char *argv[]){ // arg(2)->ip port
if(argc<3){msg("argument is ip and port");exit(0);}
hkclient c(argv);
c.conct();
c.sendMsg("i am hitesh\n");
cout<<c.getMsg();
}
#include <cstdio>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <iostream>
using namespace std;
void error(const char *msg){
perror(msg);
exit(0);
}
int readLine(int fd, char *buf, int n)
{
int s=0;
char ch;
do{
s++;
if(read(fd,&ch,1)==1)
{
*buf++ = ch;
}
}
while(ch!='\n' && s<n);
*buf='\0';
return s;
}
class hkserver{
int s_skt_fd;
int c_skt_fd;
int port;
socklen_t clilen;
struct sockaddr_in serv_addr,cli_addr;
int qlength;
public:
hkserver(int p)
{
port=p;
qlength=10;
s_skt_fd=socket(AF_INET,SOCK_STREAM,0);
if(s_skt_fd<0)
error("error opening sockdt");
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=INADDR_ANY;
serv_addr.sin_port=htons(port);
int b=bind(s_skt_fd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
if(b<0) error("error on binding");
}
void start(){
listen(s_skt_fd,qlength);
clilen=sizeof(cli_addr);
c_skt_fd=accept(s_skt_fd,(struct sockaddr *)&cli_addr,&clilen);
if(c_skt_fd<0) error("error on accepting");
}
void sendMsg(const char *s){
int n=write(c_skt_fd,s,strlen(s));
if(n<0) error("error in writing msg");
}
char * getMsg(){
char buffer[1024];
int n=readLine(c_skt_fd,buffer,1024);
if(n<0) error("error in reading msg");
return &buffer[0];
}
~hkserver()
{
close(s_skt_fd);
close(c_skt_fd);
}
};
int main(int argc,char *argv[]){ // arg(1)->port
hkserver s(atoi(argv[1]));
s.start();
string msg=s.getMsg();
cout<<"new clinet:"<<msg;
s.sendMsg("hello! I am aditi\n");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment