免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1120 | 回复: 0
打印 上一主题 下一主题

TCP客户端简单封装 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-20 18:10 |只看该作者 |倒序浏览

                               
               
                #ifndef MY_CTCPCLIENT
#define MY_CTCPCLIENT
#include sys/types.h>
#include sys/socket.h>
#include netinet/in.h>
#include unistd.h>
class CTcpClient
{
  public:
    CTcpClient();
    int connectServer(const char* hostIP, unsigned short hostPort);
    int connectServer(unsigned int hostIP, unsigned short hostPort);
    int sendData(void *data, unsigned int length);
    int recvData(void *data, unsigned int length);
    int closeClient();
  private:
       int sock_fd;
      struct sockaddr_in local_addr;
    struct sockaddr_in dest_addr;
};
#endif
#include "CTcpClient.h"
#include stdlib.h>
#include string.h>
#include stdio.h>
#include errno.h>
#include assert.h>
#include arpa/inet.h>
CTcpClient::CTcpClient()
{
    memset(&local_addr,0,sizeof(local_addr));
    memset(&dest_addr, 0, sizeof(dest_addr));
    sock_fd = -1;
}
int CTcpClient::connectServer(const char* serverIP, unsigned short serverPort)
{
     dest_addr.sin_family = AF_INET;                    /* 协议名 */
   dest_addr.sin_addr.s_addr = inet_addr(serverIP);  /* 自动分配地址 */
   dest_addr.sin_port = htons(serverPort);                   /* 端口号 */
   if(sock_fd!=-1)
       close(sock_fd);
   if((sock_fd = socket(AF_INET, SOCK_STREAM, 0))  0)
   {
        perror(strerror(errno));
        return -1;
   }
   if(connect(sock_fd, (struct sockaddr*)&dest_addr, sizeof(struct sockaddr))  0)
   {
         perror(strerror(errno));
        return -1;
   }
   return 1;
}
int CTcpClient::connectServer(unsigned int serverIP, unsigned short serverPort)
{
     dest_addr.sin_family = AF_INET;                    /* 协议名 */
   dest_addr.sin_addr.s_addr =htonl(serverIP);  /* 自动分配地址 */
   dest_addr.sin_port = htons(serverPort);                   /* 端口号 */
   if(sock_fd!=-1)
       close(sock_fd);
   if((sock_fd = socket(AF_INET, SOCK_STREAM, 0))  0)
   {
        perror(strerror(errno));
        return -1;
   }
   if(connect(sock_fd, (struct sockaddr*)&dest_addr, sizeof(struct sockaddr))  0)
   {
         perror(strerror(errno));
        return -1;
   }
     return 1;
}
int CTcpClient::sendData(void *data, unsigned int length)
{
    int send_len = 0;
    if((send_len = send(sock_fd, data, length, 0))  0 )
    {
         perror(strerror(errno));
         return -1;
    }
    else
    {
        return send_len;
    }
}
int CTcpClient::recvData(void *data, unsigned int length)
{//接收数据即返回
    int rev_len = 0;
    if((rev_len = recv(sock_fd, data, length, 0))  0)
    {
         perror(strerror(errno));
         return -1;
    }
    else
        return rev_len;
}
int CTcpClient::closeClient()
{
    if(sock_fd!=-1)
  {      
       close(sock_fd);
       sock_fd = -1;
  }
  return 1;
}
#ifdef DEBUG
int main()
{
    unsigned char buffer[1024]={'\n'};
    CTcpClient myclient;
    myclient.connectServer("192.168.1.198",22082);
    while(1)
    {
        myclient.sendData((void*)"hello server",13);
      myclient.recvData(buffer,1024);
      printf("client:%s\n",buffer);
      sleep(2);
    }
}
#endif
g++ -o tcp_c CTcpClient.cpp -Wall -DDEBUG
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/108358/showart_2126428.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP