linux tcp ip 客户端,Linux下IP v6 tcp客户端源码示例

/***********************************

*

*client.c

* www.linuxidc.com

*

**********************************/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define MAXSIZE 1024

//**************main()**************

int main(int argc,char *argv[])

{

int sockfd;

int n;

char recv_buf[MAXSIZE+1];

char send_buf[MAXSIZE+1];

struct timeval tv;

fd_set readfd;

// 参数判断

if ( argc != 3 )

{

printf("USAGE: %s [serv_address][serv_port]\n", argv[0]);

exit(1);

}

// 创建IPV6型的socket

if ( (sockfd = socket(PF_INET6, SOCK_STREAM, 0)) < 0 )

{

perror("socket");

exit(1);

}

// 转换服务器IP地址

struct sockaddr_in6 serv_addr;

bzero(&serv_addr,sizeof(serv_addr));

serv_addr.sin6_family = AF_INET6;

serv_addr.sin6_port = htons( atoi(argv[2]) );

if ( inet_pton(AF_INET6, argv[1], &serv_addr.sin6_addr ) < 0 )

{

perror(argv[1]);

exit(1);

}

// 与服务器建立连接

if ( connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr) ) < 0 )

{

perror("connect");

exit(1);

}

printf("Connected to server\n");

while (1)

{

//----------set last time---------

tv.tv_sec=600;

tv.tv_usec=0;

FD_ZERO(&readfd);

// 将标准输入和与服务连接的文件句柄读事件加入SET

FD_SET(0,&readfd);

FD_SET(sockfd,&readfd);

// 检查是否有读事件发生

if ( select( sockfd+1, &readfd, NULL, NULL, &tv) <= 0 )

{

fprintf(stderr,"\n time out\n");

break;

}

// 如果标准输入中有数据可读,则从其中读取数据,并向服务器发送

if ( FD_ISSET(0,&readfd) )

{

if( (n = read(0, send_buf, MAXSIZE-1)) <= 0 )

{

break;

}

send_buf[n]='\n';

if ( send( sockfd, send_buf, n, 0) <= 0)

{

perror("send");

break;

}

}

// 如果有从服务器发送过来的数据,则将其读取出来,并输出到标准输出

if ( FD_ISSET(sockfd, &readfd) )

{

if ( ( n = recv(sockfd, recv_buf, MAXSIZE-1, 0)) <= 0 )

{

fprintf(stderr,"connection closed.\n");

exit(1);

}

recv_buf[n]='\0';

printf("recved:%s", recv_buf);

fflush(stdout);

}

}

close(sockfd);

return 0;

}0b1331709591d260c1c78e86d0c51c18.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值