tcp初始化源码_未来!别躲呀的博客-程序员宅基地_tcp初始化

技术标签: udp  linux  tcp/ip  

void tcp_init()
{

int ret=0;
uint64_t start;
if(tcp_mutex==NULL)
	tcp_mutex = nwy_create_mutex();
nwy_sim_get_imei(&imei);
nwy_sdk_file_unlink(tcp_fail_txt);
start = nwy_get_ms();

do
{

	if(nwy_get_ms()-start>=10000)
		break;
	ret = unistep_tcp();
	nwy_ext_echo("tcp ret :%d",ret);
	nwy_sleep(100);
}while(ret != 0);
//�1�7�1�7�1�7�1�7�1�7�1�7�1�7�0�4�1�7�˄1�7�1�7�1�7�1�7�1�7�1�9�1�7
if(0 == ret&&send_location_thread==NULL)
	send_location_thread = nwy_create_thread("locationthread", tcp_send_location, NULL, NWY_OSI_PRIORITY_NORMAL, 1024*5, 16);
else 
	nwy_resume_thread(send_location_thread);

}

这里是引用`、、、、、、

在这里插入代码片
int unistep_tcp()
{
    
	int ret;
	char *url_or_ip = "120.27.18.139";
	char* sptr = nwy_ext_sio_recv_buff;
	int port = 4999;
	int on = 1;
    int opt = 1;
	uint64_t start;
	
	struct sockaddr_in sa;
    struct sockaddr_in *to4 = (struct sockaddr_in *)&sa;
	to4->sin_len = sizeof(struct sockaddr_in);
    to4->sin_family = AF_INET;
    to4->sin_port = htons(port);

	
	ip_addr_t addr = {
    0};
	char ip_buf[64] = {
    0};
	
	nwy_set_sim_detect_mode(0);

			  
	ret = nwy_hostname_check(url_or_ip, ip_buf);
    if (ret != NWY_SUCESS) {
    
    nwy_ext_echo("\r\ntcp ip error:\r\n");
    
    }
    addr.u_addr.ip4.addr = ipaddr_addr(ip_buf);
	
	if(tcp_connect_flag)
    {
    
        nwy_ext_echo("\r\ntcp alreay connect");
        return -4;
    }
	//�1�7�1�7�1�7�1�0�1�7�1�7�1�7
	if (0 == nwy_ext_check_data_connect()) {
    
		nwy_ext_echo("\r\ndata call not setup");
		
		nwy_data_start_call_v02_t param_t;
		memset(&param_t,0,sizeof(nwy_data_start_call_v02_t));
		
		param_t.profile_idx = 1;
		param_t.is_auto_recon = 1;
		param_t.auto_re_max = 0;
		param_t.auto_interval_ms = 100;

		
		ret = nwy_data_start_call(1,&param_t);

		
		OSI_LOGI(0, "=DATA=  nwy_data_start_call ret= %d", ret);
		if (ret != NWY_RES_OK)
			nwy_ext_echo("\r\nStart data call fail, result<%d>\r\n",ret);
		else 
		  	nwy_ext_echo("\r\nStart data call ...\r\n");
	}
	nwy_sleep(100);

	//�1�7�1�7�1�7�1�7�1�7�0�7�1�7�1�7�1�7
	if (sock_fd == 0) {
    
        sock_fd= nwy_socket_open(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    }

	inet_addr_from_ip4addr(&to4->sin_addr, ip_2_ip4(&addr));
	
	nwy_socket_setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on));

	nwy_socket_setsockopt(sock_fd, IPPROTO_TCP, TCP_NODELAY, (void *)&opt, sizeof(opt));
	while(0 != nwy_socket_set_nonblock(sock_fd))
    {
    
        nwy_ext_echo("\r\nsocket set err\r\n");
		nwy_sleep(100);
    }
	start = nwy_get_ms();



	//�1�7�1�7�1�7�0�5�1�7�1�7�1�7�1�7�1�7
    do
    {
    
        ret = nwy_socket_connect(sock_fd, (struct sockaddr *)&sa, sizeof(sa));
        if(ret)
        {
    
        }
        if((nwy_get_ms()-start)>= 10000 )
        {
            nwy_ext_echo("\r\nsocket connect timeout\r\n");
            nwy_socket_shutdown(sock_fd, SHUT_RD);
            nwy_socket_close(sock_fd);
            sock_fd = 0;
            return -1;
        }
        if(ret == -1)
        {
            //nwy_ext_echo("errno=%d\r\n", nwy_socket_errno());
            if( EALREADY == nwy_socket_errno() || EISCONN == nwy_socket_errno() )
            {
    
                nwy_ext_echo( "\r\nnwy_net_connect_tcp connect ok..");
                tcp_connect_flag = 1;
                break;
            }
            if (EINPROGRESS != nwy_socket_errno() )
            {
    
                nwy_ext_echo("\r\nconnect errno = %d", nwy_socket_errno());
                nwy_socket_close(sock_fd);
                sock_fd = 0;
                tcp_connect_flag = 0;
                return -2;
            }
		}
        nwy_sleep(100);
    }while(1);
	//�1�7�1�7�1�7�1�7�1�7�1�7�1�7�1�7�1�7�1�7�0�4�1�7�1�9�1�7
    if(tcp_connect_flag)
    {
    
    	if(NULL == tcp_recv_thread )
        	tcp_recv_thread = nwy_create_thread("tcp_recv_thread",nwy_tcp_recv_func, (void*)&sock_fd, NWY_OSI_PRIORITY_NORMAL, 2048, 4);
		else
			nwy_resume_thread(tcp_recv_thread);
		nwy_ext_echo("\r\ntcp_recv_thread created!");
        if(tcp_recv_thread ==NULL)
        {
    
            nwy_ext_echo("\r\ncreate tcp recv thread failed, close connect");
            nwy_socket_close(sock_fd);
            sock_fd = 0;
            tcp_connect_flag = 0;
			return -3;
        }
		
		return 0;
    }

}



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/c2693619785/article/details/119952683

智能推荐

Windows进行Java Web开发,电脑上安装什么?_weixin_43813593的博客-程序员宅基地

对于新手和要在新的电脑开发Java的狮子们,可能恨透了要安装这个那个,但确实有逃不过要一项项安装,但有时确实不容易记得住,因此在这里就简单归纳了一下,注意这里我是在Win10系统、用作Java Web开发、开发工具使用Eclipse、数据库使用MySQL:1. 安装JDKJDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,...

mybatis ssm 架包 配置_chuangmao7450的博客-程序员宅基地

&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst...

python从txt中批量读取图片名后将图片另存为_Dawn向阳而生的博客-程序员宅基地_python 图片另存为

我们在做深度学习的时候几乎都需要用到txt文件,还有对应的图片名,这个时候如果数据就几十个还好,如果再增多的话,我们就受不了了,下面我就记录顺便保存一下代码txt_file="C:\\Users\\ljs\\Desktop\\rename\\test_501.txt" #这里是txt文件的地址a=[] #创建一个列表with open(txt_file, 'r', encoding='utf-8') as file: for c in file.readlines(): a.a

linux刀塔2无法输入中文,Dota 2 - 性能问题、崩溃或无法启动 - Steam Support_weixin_39999532的博客-程序员宅基地

崩溃或无法启动,伴有特定出错提示特定的错误信息中,查看是否有与该出错提示相关的文章。如果您没有找到相关文章,请阅读下文,为您遇到的问题进行故障排除。性能问题与崩溃故障排除请阅读并完成 Dota 2 开发人员提供的常见 Dota 2 技术问题与解决方案中所有可用的故障排除步骤。请参见我们关于硬件与软件导致的性能问题的文章。严格遵照文中所述完成所有步骤。更新您的显卡驱动程序如果您的 Steam 游戏遇...

2021-03-04:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管怎么切,都要花费20个铜板。 一群人想整分整块金条,怎么分最省铜板? 例如,给定数组{10,20,3_福大大架构师每日一题的博客-程序员宅基地

2021-03-04:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管怎么切,都要花费20个铜板。 一群人想整分整块金条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金条长度为60,金条要分成10,20,30三个部分。如果先把长度60的金条分成10和50,花费60; 再把长度50的金条分成20和30,花费50;一共花费110铜板。但如果先把长度60的金条分成30和30,花费60;再把长度30金条分成10和20, 花费30;一共花费90铜板。输入一个

iText输出中文问题解决_weixin_34197488的博客-程序员宅基地

现象: iText输出时中文不显示或乱码 原因: 中文字体及编码未加载或设置。 解决: 1.使用最新的iText5.x.jar包 2.加载iTextAsian.jar至项目中。需注意:iText5.x.jar中的包路径与老版本不同,现已改为com.itextpdf.text.pdf包。其在查找字体时的路径也改为com.itextpdf.text.pdf ,因此需检查iTextAsi...

随便推点

会话EJB系列(三)SessionBean生命周期_chestnut_lan的博客-程序员宅基地

EJB生命周期:指EJB在运行过程中经历的阶段和状态。首先强调的是:SessionBean的生命周期是由容器控制的而不是应用程序!但是对于开发者而言,必须了解SessionBean在EJB中的运行规律,才可以更好的管理SessionBean。

Srping2.5+struts2.1+Ibatis2.3_SiteMesh_hunterfpx的博客-程序员宅基地

需要引进的包:struts2-core-2.0.11.jar(struts2框架)commons-lang.jar (struts2基础设施1,提供java常用操作API,比如字符串处理,XML解析等)commons-logging.jar(struts2基础设施2,提供java日志操作API,抽象出日志接口,方便操作)freemarker-2.3.8.

MFC重绘函数:InvalidateRect(), Invalidate()和UpdateWindow()_weixin_30628077的博客-程序员宅基地

1. 重绘消息当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和WM_NCPAINT(通知非客户区有变化)WM_NCPAINT系统会自己搞定WM_PAINT消息对应的函数是OnPaint(),它是系统默认的接受WM_PAINT消息的函数,但我们一般在程序中做重绘时都在OnDraw函数中进行的,因为在ONPAIN函数中调用了ONDRAW函数。///...

解决Jupyter Notebook折叠显示输出(2+1种情况,win版本)_呜哇哈哈嗝~的博客-程序员宅基地

问题描述1有时jupyter notebook输出内容和整个界面滑条一致过长,如下图(这还只是部分的输出显示)解决方法1单机左侧,实现滚轮隐藏问题描述2输出内容过多,不想看,如下图解决方法2鼠标双击左侧区域 或 从键盘输入O第三种情况就是折叠后如何展开想要再展开,单机或者双击就好啦,自己试试吧...

android开发工具类_android-李志强的博客-程序员宅基地

package com.artron.mmj.seller.utils;import android.annotation.SuppressLint;import android.app.Activity;import android.app.ActivityManager;import android.app.ActivityManager.RunningTaskInfo

推荐文章

热门文章

相关标签