TCP winsock代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//--------------------------------------------
#define MY_MAC "\x00\x06\x98\x30\x00\x35"
//IP地址(如果启用了DHCP则忽略)
#define MY_IPADDR "192.168.1.100"
//IP网络掩码(如果启用了DHCP则忽略)
#define MY_IPMASK "255.255.255.0"
//网关IP(如果启用了DHCP则忽略)
#define MY_IPGATE "192.168.1.1"
/*是否使用DHCP
#define USE_DHCP*/
//定义文件系统设备
#ifndef MY_FSDEV
#define MY_FSDEV devUrom
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
THREAD(Service,arg)
{
TCPSOCKET*sock;
FILE * stream;
u_char id=(u_char)((uptr_t)arg);
while(1)
{
if((sock=NutTcpCreateSocket())==0)
{
printf("[%u]Createing socket failed\n",id);
NutSleep(5000);
continue;
}
NutTcpAccept(sock,80);
printf("[%u]Connected, %u bytes free\n",id,NutHeapAvailable());
while(NutHeapAvailable()<8192)
{
printf("[%u]Low mem\n",id);
NutSleep(1000);
}
NutTcpConnect(sock,MY_IPADDR,6000);
u_char sendBuf[100];
printf(sendBuf,"接入%s",inet_addr(MY_IPADDR));
// send( NutTcpConnect,sendBuf,str(sendBuf),0);
NutTcpSend(sock, sendBuf,str(sendBuf));
/* if((stream=_fdopen((int)((uptr_t)sock),"r+b"))==0)
{
printf("[%u]Creating stream device failed\n",id);
}
else
{
NutHttpProcessRequest(stream);
fclose(stream); */
}
NutTcpCloseSocket(sock);
printf("[%u]Disconnected\n",id);
}
/*static void External_Interrupt7_IRQ(void * arg)
{
PORTF^=_BV(PF6);
}*/
int main(void)
{
u_long baud=125000;
// u_char i;
NutRegisterDevice(&DEV_DEBUG,0,0);
freopen(DEV_DEBUG_NAME,"w",stdout);
_ioctl(_fileno(stdout),UART_SETSPEED,&baud);
NutSleep(200);
printf("\n\nNut/OS %s HTTP DEMO...\n",NutVersionString());
if(NutRegisterDevice(&DEV_ETHER,0,0))
{
puts("Registering device failed\n");
}
printf("Configure %s...\n",DEV_ETHER_NAME);
u_char mac[]=MY_MAC;
printf("initial boot...\n");
u_long ip_addr=inet_addr(MY_IPADDR);
u_long ip_mask=inet_addr(MY_IPMASK);
u_long ip_gate=inet_addr(MY_IPGATE);
NutRegisterDevice(&MY_FSDEV,0,0);
while(1) NutSleep(60000);
return 0;
}
const char *msg1= "Hello Client:led ON"
const char *msg2= "Hello Client:led OFF";
if(PORTF=OXFF)
{
NutTcpSend(sock,msg1,strlen(msg1)+1);
}
if(PORTF=0X
BF)
{
NutTcpSend(sock,msg2,strlen(msg2)+1);
}
NutSleep(1000);
const char *msg = "Hello Client";
NutTcpSend(sock,msg,strlen(msg)+1);
NutSleep(1000);
}
首先说(1<<5)的意思是1这个数循环左移5位,就是二进制00000001左移5位变成二进制数00100000=十进制的32,也可以理解为2的5次方;PINC&(1<<5)等效与 PINC&0b00100000,也就是将C端口读的数屏蔽掉其他位,只留下PC5,也就是PC5是高电平1的时候PINC&(1<<5)==0b00100000(就是0x20),如果PC5为低电平0,那么PINC&(1<<5)==0b00000000(就是0x00)。
const char *recvBuf;
NutTcpReceive(sock,recvBuf,strlen(recvBuf));
if(recvBuf=="123")
{
PORTF^=_BV(PF3);
_delay_ms(120);
}