//client.h
#ifndef __TENSERVER_H
#define __TENSERVER_H
#include<iostream>
#include<string>
#ifdef __cplusplus
extern "C" {
#include<unistd.h>
#include<fcntl.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/select.h>
#include <sys/time.h>
#include<stdio.h>
#include<errno.h>
#include<unistd.h>
}
#endif
using namespace std;
#define IFDEBU
#define SOCKE_ADDRINFO "192.168.110.128"
#define SOCKE_PORTINFO 65532
class TenClient
{
public:
TenClient(){}
int SetUblock(int sock);
int Socket(int family,int type,int protocol);
void Connect(int fd, const struct sockaddr *sa, socklen_t salen);
ssize_t readn(int fd, void *vptr, size_t n);
void Writen(int fd, void *ptr, size_t nbytes);
ssize_t writen(int fd, const void *vptr, size_t n);
public:
void ClienSockWork();
private:
TenClient(const TenClient &);
TenClient& operator=(const TenClient &);
};
ssize_t TenClient::writen(int fd, const void *vptr, size_t n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr;
ptr = (char *)vptr;
nleft = n;
while (nleft > 0) {
if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
if (errno == EINTR)
nwritten = 0; /* and call write() again */
else
return(-1); /* error */
}
nleft -= nwritten;
ptr += nwritten;
}
return(n);
}
void TenClient::Writen(int fd, void *ptr, size_t nbytes)
{
if (writen(fd, ptr, nbytes) != nbytes)
{
cout<<"writen error"<<endl;
exit(0);
}
}
void TenClient::ClienSockWork()
{
int n;
int optval;
int sockfd;
char recvline[65535];
struct sockaddr_in sin;
//connect the TenServer
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
cout<<"socket error"<<endl;
exit(0);
}
bzero(&sin,sizeof(sin));
sin.sin_port = htons(SOCKE_PORTINFO);
sin.sin_family = AF_INET;
sin.sin_addr.s_addr=inet_addr(SOCKE_ADDRINFO);
//reuse the address
//setsockopt (sockfd, SOL_SOCKET, SO_REUSEADDR,(char *)&optval, sizeof (optval)) ;
if(connect(sockfd,(sockaddr *)&sin,sizeof(sin)) <0)
{
perror("connect");
cout<<"connect error"<<endl;
exit(0);
}
cout<<"-------------1"<<endl;
strcpy(recvline,"I love Tencent");
Writen(sockfd,recvline,sizeof(recvline));
cout<<"--------------2"<<endl;
while((n=read(sockfd,recvline,65535))>0)
{
cout<<"--------------------3"<<endl;
recvline[n]=0;
cout<<recvline<<endl;
}
exit(0);
/*
struct addrinfo hints,*res , *ressave;
bzero(&hints,sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
if ( getaddrinfo(host,"http",&hints,&res )!=0)
return -1;
ressave = res;
do
{
sockfd = socket(res->ai_family,res->ai_socktype,
res->ai_protocol);
if(sockfd<0)
continue;
setsockopt (sockfd, SOL_SOCKET, SO_REUSEADDR,
(char *)&optval, sizeof (optval)) ;
((sockaddr_in *)(res->ai_addr))->sin_port = htons(port);
if(connect(sockfd,res->ai_addr,res->ai_addrlen) == 0)
break;
close(sockfd);
}while((res=res->ai_next)!=NULL);
if(res==NULL)
return -1;
struct sockaddr_in * sin = (sockaddr_in *) res->ai_addr;
hostip = (sin->sin_addr).s_addr;
freeaddrinfo(ressave);
pthread_mutex_lock(&mutexHostToIp);
mapHostToIp.insert(make_pair(host,hostip));
pthread_mutex_unlock(&mutexHostToIp);
return sockfd;
*/
}
#endif
///main.cpp/
#include<iostream>
#include"client.h"
int main(int argc,char *argv)
{
TenClient tencent11;
tencent11.ClienSockWork();
return 0;
}