vs下的socket网络编程

编程入门 行业动态 更新时间:2024-10-09 20:21:39

vs下的socket<a href=https://www.elefans.com/category/jswz/34/1768814.html style=网络编程"/>

vs下的socket网络编程

// ConsoleApplication1.cpp: 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include <WINSOCK2.H>
#include<Ws2tcpip.h>
#include <STDIO.H>
#include <time.h>


#pragma  comment(lib, "ws2_32.lib")




int main(int argc, char* argv[])
{
char recData[1024];
FILE* fp = NULL;


int my_port;
char my_ip[24];
printf("请输入端口号:");


scanf("%d",&my_port);
printf("port[%d]\n",my_port);


printf("请输入ip地址:");


scanf("%s", my_ip);


printf("ip: %s\n", my_ip);


fp=fopen("test.txt","rb");


if (fp == NULL)
{
printf("打开文件失败\n");
return 0;
}


WORD sockVersion = MAKEWORD(2, 2);
WSADATA data;
int len = 0;
int ret = 0;
unsigned long ul = 1;
if (WSAStartup(sockVersion, &data) != 0)
{
return 0;
}

SOCKET sclient = socket(AF_INET, SOCK_STREAM,0 );//IPPROTO_TCP

if (sclient == INVALID_SOCKET)
{
printf("invalid socket !");
return 0;
}





sockaddr_in serAddr;
    serAddr.sin_family = AF_INET;
    serAddr.sin_port = htons(my_port);

inet_pton(AF_INET, my_ip, &serAddr.sin_addr.S_un.S_addr);


if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
{
printf("connect error !");
char c = getchar();
closesocket(sclient);
return 0;
}
char sendData[1024];




for (;;) {

//设置非阻塞模式
int value = ioctlsocket(sclient, FIONBIO, (unsigned long *)&ul);
if (value == SOCKET_ERROR)
{
printf("set failed\n");
}
len = fread(sendData, 1, sizeof(sendData), fp);
printf("len =%d\n",len);
#if 0
strcpy(sendData, "POST / HTTP/1.1\r\n");
strcat(sendData, "cache - control: no - cache\r\n");
strcat(sendData, "Postman-Token: ff64cb7f-cf5a-429b-a234-6d328682a07d\r\n");
strcat(sendData, "User-Agent: AABB\r\n");
strcat(sendData, "Content-Type: application/x-www-form-urlencoded\r\n");
strcat(sendData, "Accept: */*\r\n");
strcat(sendData, "Host: 13.71.130.113:80\r\n");
strcat(sendData, "accept-encoding: gzip, deflate\r\n");
strcat(sendData, "content-length: 299\r\n");
strcat(sendData, "Connection: keep-alive\r\n");
strcat(sendData,"\n");
strcat(sendData,"terminal_id=302001017BT9901T005&macaddr=00%3A00%3A00%3A00%3A00%3A01&FWVer=1.11&Type=1&date=2018-04-04%2017%3A55%3A00&BatteryDisCharge=123&BatteryCharge=123&PowerCharge=123&PowerDisCharge=123&soc=12&BatteryRecycle=12&BatteryRemainkWh=123&BatteryVol=123&RunMode=1&RunStatus=1&ErrorCode=A13&Download=OK");


printf("%s\n",sendData);
#endif
if (len > 0) {
fseek(fp,0L,SEEK_SET);
send(sclient, sendData, len, 0); // 第一次发送
len = 0;
// 循环等待5s
for (int count = 0; count < 500;count++) {

ret = recv(sclient, recData, 255, 0);
printf("ret = %d\n",ret);

if (ret> 0)
{
recData[ret] = '\0';
printf("%s\n",recData);
Sleep(10*60*1000-5000);//10分钟
break;
}

Sleep(10);//10ms
printf("run……%d\n",count);
}

printf("ret=%d\n",ret);

// 三次重传机制10s一次
if(ret < 0){
for (int i = 0; i <3000; i++) {

if (i % 1000 == 0) {
printf("-------------------------------------------------------%d\n",i%1000);
send(sclient, sendData, len, 0);
}
if ((ret = recv(sclient, recData, 255, 0)) > 0)
{
printf("%d s 已收到数据 ret[%d]\n",i*10/1000, ret);
Sleep(10 * 60 * 1000-i*10);//10分钟
break;
}
Sleep(10);// 10ms
printf("run……%d\n",i);
}
if (ret < 0)
Sleep(10*60*1000-35*1000);
}

}
}


closesocket(sclient);
fclose(fp);
fp = NULL;
    WSACleanup();
printf("输入任意按钮……\n");
char ch = getchar();
    return 0;
 }

更多推荐

vs下的socket网络编程

本文发布于:2024-03-15 10:35:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1738705.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:网络编程   socket

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!