/*!
******************************************************************************
* \File
* socket client
* \data
* 2017.10.10
* \Author
* tqq
******************************************************************************
*/
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <resolv.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#define MAXBUF 1024
//================================tcp socket comm======================================================
typedef void (*CONNECT_CALL_BACK)(int,void *,unsigned short);
typedef void (*SEND_CALL_BACK)(int,char *,unsigned short);
typedef int (*RECV_CALL_BACK)(int,char *,int);
typedef void (*DISCONNECT_CALL_BACK)(int,char *,unsigned short,char * ,unsigned short);
typedef void (*HEARTBEAT_CALL_BACK)(int);
int sockfd, sock_len;
struct sockaddr_in dest;
char sock_buffer[MAXBUF];
fd_set rfds;
struct timeval tv;
int retval, maxfd = -1;
int tcp_client(unsigned char *ip,unsigned short port,SEND_CALL_BACK sends_cb,RECV_CALL_BACK recv_cb,CONNECT_CALL_BACK connect_cb,DISCONNECT_CALL_BACK disconnect_cb,HEARTBEAT_CALL_BACK heartbeat_cb,unsigned int heartbeat_time);
//================================tcp socket comm======================================================
void sock_send_callback(int socket,char * buf,unsigned short len)
{
}
int sock_recv_callback(int socket,char * buf,int len)
{
}
void sock_connect_callback(int socket,void * buf,unsigned short len)
{
printf("connect the server success!!\n");
}
void sock_hb_callback(int socket)
{
printf("heart beat\n");
}
void sock_disconnect_callback(int socket,char *recvbuf,unsigned short recvlen,char *sendbuf ,unsigned short sendlen)
{
printf("the server disconnect ..\n");
tcp_client("10.39.132.95",6000,sock_send_callback,sock_recv_callback,sock_connect_callback,sock_disconnect_callback,sock_hb_callback,5);
}
int tcp_client(unsigned char *ip,unsigned short port,SEND_CALL_BACK sends_cb,RECV_CALL_BACK recv_cb,CONNECT_CALL_BACK connect_cb,DISCONNECT_CALL_BACK disconnect_cb,HEARTBEAT_CALL_BACK heartbeat_cb,unsigned int heartbeat_time)
{
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("Socket");
exit(errno);
}
bzero(&dest, sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_port = htons(port);
memset(&(dest.sin_zero), 0, 8);
if (inet_aton(ip, (struct in_addr*)&dest.sin_addr.s_addr) == 0)
{
perror(ip);
exit(errno);
}
while(1)
{
if (connect(sockfd, (struct sockaddr*)&dest, sizeof(dest)) != 0)
{
perror("Connect error");
}
else
break;
sleep(1);
}
connect_cb(sockfd,&dest,sizeof(dest));
sends_cb(sockfd,NULL,0);
printf("\nReady to start chatting.\n\
Direct input messages and \n\
enter to send messages to the server\n");
while (1)
{
FD_ZERO(&rfds);
FD_SET(0, &rfds);
maxfd = 0;
FD_SET(sockfd, &rfds);
if (sockfd > maxfd)
maxfd = sockfd;
tv.tv_sec = heartbeat_time;
tv.tv_usec = 0;
retval = select(maxfd+1, &rfds, NULL, NULL, &tv);
if (retval == -1)
{
printf("Will exit and the select is error! %s", strerror(errno));
break;
}
else if (retval == 0)
{
//printf("No message comes, no buttons, continue to wait ...\n");
heartbeat_cb(sockfd);
}
else
{
if (FD_ISSET(sockfd, &rfds))
{
bzero(sock_buffer, MAXBUF+1);
sock_len = recv(sockfd, sock_buffer, MAXBUF, 0);
if (sock_len > 0)
{
printf("Successfully received the message: '%s',%d bytes of data\n",
sock_buffer, sock_len);
recv_cb(sockfd,sock_buffer,sock_len);
}
else
{
if (sock_len < 0)
printf("Failed to receive the message! \
The error code is %d, error message is '%s'\n",
errno, strerror(errno));
else
printf("Chat to terminate!\n");
break;
}
}
}
}
close(sockfd);
disconnect_cb(sockfd,NULL,0,NULL,0);
return 0;
}
int main(int argc, char **argv)
{
tcp_client("10.39.132.95",6000,sock_send_callback,sock_recv_callback,sock_connect_callback,sock_disconnect_callback,sock_hb_callback,5);
}
******************************************************************************
* \File
* socket client
* \data
* 2017.10.10
* \Author
* tqq
******************************************************************************
*/
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <resolv.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#define MAXBUF 1024
//================================tcp socket comm======================================================
typedef void (*CONNECT_CALL_BACK)(int,void *,unsigned short);
typedef void (*SEND_CALL_BACK)(int,char *,unsigned short);
typedef int (*RECV_CALL_BACK)(int,char *,int);
typedef void (*DISCONNECT_CALL_BACK)(int,char *,unsigned short,char * ,unsigned short);
typedef void (*HEARTBEAT_CALL_BACK)(int);
int sockfd, sock_len;
struct sockaddr_in dest;
char sock_buffer[MAXBUF];
fd_set rfds;
struct timeval tv;
int retval, maxfd = -1;
int tcp_client(unsigned char *ip,unsigned short port,SEND_CALL_BACK sends_cb,RECV_CALL_BACK recv_cb,CONNECT_CALL_BACK connect_cb,DISCONNECT_CALL_BACK disconnect_cb,HEARTBEAT_CALL_BACK heartbeat_cb,unsigned int heartbeat_time);
//================================tcp socket comm======================================================
void sock_send_callback(int socket,char * buf,unsigned short len)
{
}
int sock_recv_callback(int socket,char * buf,int len)
{
}
void sock_connect_callback(int socket,void * buf,unsigned short len)
{
printf("connect the server success!!\n");
}
void sock_hb_callback(int socket)
{
printf("heart beat\n");
}
void sock_disconnect_callback(int socket,char *recvbuf,unsigned short recvlen,char *sendbuf ,unsigned short sendlen)
{
printf("the server disconnect ..\n");
tcp_client("10.39.132.95",6000,sock_send_callback,sock_recv_callback,sock_connect_callback,sock_disconnect_callback,sock_hb_callback,5);
}
int tcp_client(unsigned char *ip,unsigned short port,SEND_CALL_BACK sends_cb,RECV_CALL_BACK recv_cb,CONNECT_CALL_BACK connect_cb,DISCONNECT_CALL_BACK disconnect_cb,HEARTBEAT_CALL_BACK heartbeat_cb,unsigned int heartbeat_time)
{
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("Socket");
exit(errno);
}
bzero(&dest, sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_port = htons(port);
memset(&(dest.sin_zero), 0, 8);
if (inet_aton(ip, (struct in_addr*)&dest.sin_addr.s_addr) == 0)
{
perror(ip);
exit(errno);
}
while(1)
{
if (connect(sockfd, (struct sockaddr*)&dest, sizeof(dest)) != 0)
{
perror("Connect error");
}
else
break;
sleep(1);
}
connect_cb(sockfd,&dest,sizeof(dest));
sends_cb(sockfd,NULL,0);
printf("\nReady to start chatting.\n\
Direct input messages and \n\
enter to send messages to the server\n");
while (1)
{
FD_ZERO(&rfds);
FD_SET(0, &rfds);
maxfd = 0;
FD_SET(sockfd, &rfds);
if (sockfd > maxfd)
maxfd = sockfd;
tv.tv_sec = heartbeat_time;
tv.tv_usec = 0;
retval = select(maxfd+1, &rfds, NULL, NULL, &tv);
if (retval == -1)
{
printf("Will exit and the select is error! %s", strerror(errno));
break;
}
else if (retval == 0)
{
//printf("No message comes, no buttons, continue to wait ...\n");
heartbeat_cb(sockfd);
}
else
{
if (FD_ISSET(sockfd, &rfds))
{
bzero(sock_buffer, MAXBUF+1);
sock_len = recv(sockfd, sock_buffer, MAXBUF, 0);
if (sock_len > 0)
{
printf("Successfully received the message: '%s',%d bytes of data\n",
sock_buffer, sock_len);
recv_cb(sockfd,sock_buffer,sock_len);
}
else
{
if (sock_len < 0)
printf("Failed to receive the message! \
The error code is %d, error message is '%s'\n",
errno, strerror(errno));
else
printf("Chat to terminate!\n");
break;
}
}
}
}
close(sockfd);
disconnect_cb(sockfd,NULL,0,NULL,0);
return 0;
}
int main(int argc, char **argv)
{
tcp_client("10.39.132.95",6000,sock_send_callback,sock_recv_callback,sock_connect_callback,sock_disconnect_callback,sock_hb_callback,5);
}