hi,
i am making a chat server....but the problem is only one way chat occurs....the connection gets lost on the client side....cud u plz let me know where i am going wrong
thanks in advance
Code:
/// CLIENT
int main(int argc, char *argv[])
{
printf("This is the client program\n");
int sockfd;
int len, rc ;
int result;
struct sockaddr_in address;
char arr[]={'\0'};
printf("enter the string\n");
gets(arr);
int i;
int length=strlen(arr);
printf("len of the arr is %d\n", length);
//Create socket for client.
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("Socket create failed.\n") ;
return -1 ;
}
//Name the socket as agreed with server.
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = htons(7764);
len = sizeof(address);
result = connect(sockfd, (struct sockaddr *)&address, len);
if(result == -1)
{
perror("Error has occurred");
exit(-1);
}
//Read and write via sockfd
rc = write(sockfd, &length, 20);
printf("write rc = %d\n", rc ) ;
if (rc == -1)
return -1;
read(sockfd, &length, 20);
printf("Char from server = %c\n", arr);
//if (ch == 'A') sleep(5) ; // pause 5 seconds
close(sockfd);
exit(0);
}
// SERVER
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/un.h>
int main()
{
printf("This is the server program\n");
//naming variables
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
char ch='B';
int result;
int res;
int rc;
// removing old sockets
unlink("server_socket");
server_sockfd=socket(AF_INET,SOCK_STREAM,0);
if (server_sockfd == -1) {
perror("Socket create failed.\n") ;
return -1 ;
}
//naming of socket
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = htons(7764);
server_len = sizeof(server_address);
result = bind(server_sockfd, (struct sockaddr *)&server_address,server_len);
if(result == -1)
{
perror("Error has occurred");
exit(-1);
}
res=listen(server_sockfd, 5);
if(res==-1)
{
perror("error");
exit(-1);
}
client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,client_len);
read(client_sockfd,&ch,1);
ch++;
while ( ch < 'z') {
//Read and write via sockfd
rc = read(client_sockfd, &ch, 1);
printf("write rc\n", rc ) ;
if (rc == -1) break ;
write(client_sockfd, &ch, 1);
printf("Char from server = %c\n", ch);
}
close(client_sockfd);
exit(0);
}