socket 的select 服务器/客户机程序

//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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值