P
priya
Hi All,
Currently I am working in Socket Progrm written in C.
Here i pasted Both Server and client code..
Server.c code
#include "stdio.h"
#include <winsock.h>
#include <process.h>
#include <windows.h>
#define PORT 1200
#define BACKLOG 4
#include "stdlib.h"
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "wsock32.lib")
#pragma comment(lib, "advapi32.lib")
int i;
int main()
{
WSADATA wsda;
WSAStartup(0x0101,&wsda);
struct sockaddr_in server;
struct sockaddr_in client;
int sockfd,sockfd2,sockfd3, n_bytes;
char *ret11;
char *a="hello client";
char *b= "Got my Msg";
char *c ="Reply Me ";
const char *msg1;
const char *msg2;
const char *msg3;
char *msg;
msg1 = a;
msg2 = b;
msg3 = c;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("Socket error...");
return 0;
}
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(PORT);
server.sin_family=AF_INET;
if(bind(sockfd,(struct sockaddr*)&server,sizeof(struct
sockaddr))==-1)
{
printf("Cannot bind...");
return 0;
}
if(listen(sockfd,BACKLOG))
{
printf("Error Listening...");
return 0;
}
int size=sizeof(struct sockaddr_in);
if((sockfd2=accept(sockfd,(struct sockaddr*)&client,&size))==-1)
{
printf("Accept Error...");
return 0;
}
send(sockfd2,msg1,sizeof(msg1),0);
send(sockfd2,msg2,sizeof(msg2),0);
send(sockfd2,msg3,sizeof(msg3),0);
if(listen(sockfd,BACKLOG))
{
printf("Error Listening...");
return 0;
}
int size1=sizeof(struct sockaddr_in);
if((sockfd3=accept(sockfd,(struct sockaddr*)&client,&size1))==-1)
{
printf("Accept Error...");
return 0;
}
if((n_bytes=recv(sockfd3,msg,sizeof(msg),0))==-1)
{
printf("Error Recv in receving value from client(hello)
............");
int err = WSAGetLastError();
if(err == WSAECONNRESET)
printf("\n WSAECONNRESET Error\n");
}
ret11=msg;
if(listen(sockfd,BACKLOG))
{
printf("Error Listening...");
return 0;
}
WSACleanup();
closesocket(sockfd);
closesocket(sockfd2);
closesocket(sockfd3);
return 0;
}
I am sending Three message using multiple sends in same server code.
1.is this possible to use multiple send in same server code?
2.client code
#include "stdio.h"
#include <winsock.h>
#include <sys/types.h>
#include "string.h"
#include "stdlib.h"
#define PORT 1200
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "wsock32.lib")
#pragma comment(lib, "advapi32.lib")
int main(int argc,char *argv[])
{
WSADATA wsda;
WSAStartup(0x0101,&wsda);
struct sockaddr_in server;
static int sockfd;
struct hostent *h;
int i=0;
char *a="hello server";
char *b;
char *c;
char *d;
char *msg,*msg1;
char *msg2;
char *msg3;
char **res;
char *ar[3];
int n_bytes;
if(argc!=2)
{
printf("Usage : client ");
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("Socket Error...");
exit(1);
}
if((h=gethostbyname(argv[1]))==NULL)
{
fprintf(stderr,"Host Name Error...");
exit(1);
}
server.sin_addr=*((struct in_addr*)h->h_addr);
server.sin_port=htons(PORT);
server.sin_family=AF_INET;
if(connect(sockfd,(struct sockaddr*)&server,sizeof(struct
sockaddr))==-1)
{
fprintf(stderr,"Connection out...");
exit(1);
}
if((n_bytes=recv(sockfd,msg1,sizeof(msg1),0))==-1)
{
printf("Error Recv...");
}
printf("the client values is1 %s:\n",msg1);
b=msg1;
if((n_bytes=recv(sockfd,msg2,sizeof(msg2),0))==-1)
{
printf("Error Recv...");
}
printf("the client values is2 %s :\n",msg2);
c=msg2;
if((n_bytes=recv(sockfd,msg3,sizeof(msg3),0))==-1)
{
printf("Error Recv...");
}
printf("the client values is3 %s :\n",msg3);
d=msg3;
ar[0]=b;
ar[1]=c;
ar[2]=d;
res=ar;
msg=a;
if((n_bytes=send(sockfd,msg,sizeof(msg),0))==-1)
{
printf("Error Sending in Client...");
}
closesocket(sockfd);
return 0;
}
Here i am using three recv function for collecting all messege .
My output is
the client values is1 :hell
the client values is2 :Got
the client values is3 :Repl
Here i didnt get the full output what i sent from server side.
Where did i do the mistake?
plz point out my mistake?
Regards,
priya
Currently I am working in Socket Progrm written in C.
Here i pasted Both Server and client code..
Server.c code
#include "stdio.h"
#include <winsock.h>
#include <process.h>
#include <windows.h>
#define PORT 1200
#define BACKLOG 4
#include "stdlib.h"
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "wsock32.lib")
#pragma comment(lib, "advapi32.lib")
int i;
int main()
{
WSADATA wsda;
WSAStartup(0x0101,&wsda);
struct sockaddr_in server;
struct sockaddr_in client;
int sockfd,sockfd2,sockfd3, n_bytes;
char *ret11;
char *a="hello client";
char *b= "Got my Msg";
char *c ="Reply Me ";
const char *msg1;
const char *msg2;
const char *msg3;
char *msg;
msg1 = a;
msg2 = b;
msg3 = c;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("Socket error...");
return 0;
}
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(PORT);
server.sin_family=AF_INET;
if(bind(sockfd,(struct sockaddr*)&server,sizeof(struct
sockaddr))==-1)
{
printf("Cannot bind...");
return 0;
}
if(listen(sockfd,BACKLOG))
{
printf("Error Listening...");
return 0;
}
int size=sizeof(struct sockaddr_in);
if((sockfd2=accept(sockfd,(struct sockaddr*)&client,&size))==-1)
{
printf("Accept Error...");
return 0;
}
send(sockfd2,msg1,sizeof(msg1),0);
send(sockfd2,msg2,sizeof(msg2),0);
send(sockfd2,msg3,sizeof(msg3),0);
if(listen(sockfd,BACKLOG))
{
printf("Error Listening...");
return 0;
}
int size1=sizeof(struct sockaddr_in);
if((sockfd3=accept(sockfd,(struct sockaddr*)&client,&size1))==-1)
{
printf("Accept Error...");
return 0;
}
if((n_bytes=recv(sockfd3,msg,sizeof(msg),0))==-1)
{
printf("Error Recv in receving value from client(hello)
............");
int err = WSAGetLastError();
if(err == WSAECONNRESET)
printf("\n WSAECONNRESET Error\n");
}
ret11=msg;
if(listen(sockfd,BACKLOG))
{
printf("Error Listening...");
return 0;
}
WSACleanup();
closesocket(sockfd);
closesocket(sockfd2);
closesocket(sockfd3);
return 0;
}
I am sending Three message using multiple sends in same server code.
1.is this possible to use multiple send in same server code?
2.client code
#include "stdio.h"
#include <winsock.h>
#include <sys/types.h>
#include "string.h"
#include "stdlib.h"
#define PORT 1200
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "wsock32.lib")
#pragma comment(lib, "advapi32.lib")
int main(int argc,char *argv[])
{
WSADATA wsda;
WSAStartup(0x0101,&wsda);
struct sockaddr_in server;
static int sockfd;
struct hostent *h;
int i=0;
char *a="hello server";
char *b;
char *c;
char *d;
char *msg,*msg1;
char *msg2;
char *msg3;
char **res;
char *ar[3];
int n_bytes;
if(argc!=2)
{
printf("Usage : client ");
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("Socket Error...");
exit(1);
}
if((h=gethostbyname(argv[1]))==NULL)
{
fprintf(stderr,"Host Name Error...");
exit(1);
}
server.sin_addr=*((struct in_addr*)h->h_addr);
server.sin_port=htons(PORT);
server.sin_family=AF_INET;
if(connect(sockfd,(struct sockaddr*)&server,sizeof(struct
sockaddr))==-1)
{
fprintf(stderr,"Connection out...");
exit(1);
}
if((n_bytes=recv(sockfd,msg1,sizeof(msg1),0))==-1)
{
printf("Error Recv...");
}
printf("the client values is1 %s:\n",msg1);
b=msg1;
if((n_bytes=recv(sockfd,msg2,sizeof(msg2),0))==-1)
{
printf("Error Recv...");
}
printf("the client values is2 %s :\n",msg2);
c=msg2;
if((n_bytes=recv(sockfd,msg3,sizeof(msg3),0))==-1)
{
printf("Error Recv...");
}
printf("the client values is3 %s :\n",msg3);
d=msg3;
ar[0]=b;
ar[1]=c;
ar[2]=d;
res=ar;
msg=a;
if((n_bytes=send(sockfd,msg,sizeof(msg),0))==-1)
{
printf("Error Sending in Client...");
}
closesocket(sockfd);
return 0;
}
Here i am using three recv function for collecting all messege .
My output is
the client values is1 :hell
the client values is2 :Got
the client values is3 :Repl
Here i didnt get the full output what i sent from server side.
Where did i do the mistake?
plz point out my mistake?
Regards,
priya