socket Client 天剑最大重连次数

#include <stdlib.h>
#include <dirent.h>
#include <time.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/types.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <error.h>
#include <string.h>
int readnet( int sockid, register char *ptr, short nbytes) 
{
int nleft=0,nread=0;
fd_set          Readyfd;
struct          timeval timeout;
int             ret;
nleft=nbytes;
FD_ZERO(&Readyfd);
FD_SET(sockid, &Readyfd);
timeout.tv_sec = 0;
timeout.tv_usec = 500000;//0.5秒
ret = select(sockid+1, NULL, &Readyfd, NULL, &timeout);
if(ret<=0)
{
return -1;
}
nleft=nbytes;
while(nleft > 0) 
{                            
nread = read(sockid,ptr,nleft);
if (nread <= 0 ) 
{
return (nread);
}
nleft -=nread;
ptr +=nread;
}
return nbytes-nleft;
}
int Client()
{
char buf[200] = {0};
int iSockfd = socket(PF_INET,SOCK_STREAM,0);/*1. 准备socket*/
if(iSockfd == -1)
{
return -1;
}
struct sockaddr_in addr;
addr.sin_family = PF_INET;
addr.sin_port = htons(17777);
inet_aton("127.0.0.1",&addr.sin_addr);
//unsigned long ul = 1;
//ioctl(iSockfd, FIONBIO, &ul); //设置为非阻塞模式
struct          timeval timeout;
timeout.tv_sec = 10;
timeout.tv_usec = 500000;//0.5秒
setsockopt(iSockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));  
fd_set          Readyfd;
int             ret;
int iNum = 0;
while(-1 == connect(iSockfd,(struct sockaddr*)&addr, sizeof(addr)))
{
iNum ++;
printf("--------%d  次重连\n",iNum);
sleep(1);
if(iNum == 10)
{
printf("-----------连接失败\n");
return -1;
}
}
ret = select(iSockfd, NULL, &Readyfd, NULL, &timeout);
//printf("--------Connect  =%d\n",iRes);
printf("--------select =%d\n",ret);
write(iSockfd,(char *)"hello world ,I‘m Client", 100);
//ret = select(iSockfd, NULL, &Readyfd, NULL, &timeout);
printf("---------ret=%d\n",ret);
int i;
for( i=0;i<6;i++)
{
if(ret == 0)
{
int iRet = read(iSockfd, buf, 100);
printf("---1----超时 次数:%d\n",i);
if(iRet <= 0)
{
continue;
}
else
{
break;
}
}
if(ret>0)
{
int iSet = FD_ISSET(iSockfd, &Readyfd);
int iRet = read(iSockfd, buf, 100);
printf("---2----超时 次数:%d\n",i);
}
}
//int iRet = read(iSockfd, buf, 100);
printf("-------buf=%s\n",buf);
printf("--------------函数结束--------\n");
return 0;
}
int main()
{
Client();
return 0;
}
时间: 2024-11-14 18:27:19

socket Client 天剑最大重连次数的相关文章

Python Socket Client及Server简单编程

本文主要介绍使用Python语言编写Socket协议Server及Client的简单实现方法. 1. Python Socket编程简介 Socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 三种流行的套接字类型是:stream,datagram和raw.stream和datagram套接字可以直接与TCP协议进行接口,而raw套接字则接口到IP协议. Python Socket模块提供了对低层BSD套接字样式网络的访问,使用

java socket client

用tornado做了个socket server.无奈联调的人员对接不上. 于是撸出了以下demo import java.io.*; import java.net.*; public class SocketTest{ SocketTest(){} void test() { try{ Socket requestSocket = new Socket("xxx.xxx.xxx.xxx", 60006); OutputStream out = requestSocket.getOu

python - socket - client端指定ip和端口

问题描述: 在设备中有3个NI, ip分别为192.168.1.5/6/7.其中本端192.168.1.6同对端192.168.1.10建立了一个tunnel. 我希望测试tunnel连通性, 对端起一个socket server.本段作为client. 但是如果本端client直接连接,使用的源ip为192.168.1.5,端口随机. 我的迷惑在寻找一个指定ip的函数,在看了python的manual document中socket部分看了一遍后,没有找到这个函数. 随后我意识到我的一个思维误

socket client简单传输数据

1.整数转换为用于TCP传输的二进制 _host = "127.0.0.1" _port = 5678 _address = (_host, _port) s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) connect_result = s.connect(self._address) #二进制的字符串 s.send(b'welcome to server!') # !代表的是大字节序 s.send(struct.pack(&quo

linux下socket断开检测与重连

一 使用select函数的返回值判断(适用于在一定时间段内肯定有数据交互的场合) #include <sys/select.h> int select (int maxfd + 1,    fd_set *readset,    fd_set *writeset,    fd_set *exceptset,    const struct timeval * timeout); 最大的文件描述符加1,  检查可读性,      检查可写性 检查带外数据, 一个指向timeval结构的指针,用于

C#之Socket断线和重连

一.网上常用方法 1.当Socket.Conneted == false时,调用如下函数进行判断 1 /// 2 /// 当socket.connected为false时,进一步确定下当前连接状态 3 /// 4 /// 5 private bool IsSocketConnected() 6 { 7 #region remarks 8 /*******************************************************************************

Java Socket网络编程Client端详解

此类实现客户端套接字(也可以就叫“套接字”).套接字是两台机器之间的通信端点. Socket client = new Socket(ip,port);//创建一个流套接字并将其连接到指定 IP 地址的指定端口号. 以下为完整的客户端示例: SocketClientDemo.java public class SocketClientDemo { /** * 向指定的地址发送请求数据 * @param ipAddr * @param reqData */ public void sendReq(

Java设置Client Socket链接Server超时时间

Java设置Client Socket链接Server超时时间 学习了:http://blog.csdn.net/tterminator/article/details/52494141 http://blog.csdn.net/fw0124/article/details/41227543 整理如下: Socket client = null; // 创建一个流套接字,连接到指定主机上的指定端口号 // client = new Socket(IP, PORT); client = new S

简易版聊天系统实现 Socket VS NIO两种实现方式

说是简单聊天系统,压根不能算是一个系统,顶多算个雏形.本文重点不在聊天系统设计和实现上,而是通过实现类似效果,展示下NIO 和Socket两种编程方式的差异性.说是Socket与NIO的编程方式,不太严谨,因为NIO的底层也是通过Socket实现的,但又想不出非常好的题目,就这样吧. 主要内容 Socket方式实现简易聊天效果 NIO方式实现简易聊天效果 两种方式的性能对比 前言 预期效果,是客户端之间进行"广播"式聊天,类似于QQ群聊天.希望以后有机会,以此简易版为基础,不断演进,演