Socket 服务端小程序

zhgw963852 zhgw963852 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
程序很简单就是想给客户端发送一点数据,这里发送的时时间字符串。
accept 函数不是阻塞的吗?程序到了accept不是应该停止等待连接吗?为什么我这个程序直接就过去了,得到了一个不正确的socket返回值。
#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#define MAXSIZE 1024*2
#pragma comment(lib,"Ws2_32.lib")
int main()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2),&wsaData)!= 0)
{
printf("start error");
}
int len;
SOCKADDR_IN serv_addr;
SOCKADDR_IN l_addr;
char recvmsg[MAXSIZE];
SOCKET sServer,AcceptSocket;

sServer = socket(PF_INET, SOCK_STREAM, 0);
if (sServer < 0) {
printf("socket error");
return -1;
}

memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(2016);
serv_addr.sin_addr.s_addr =htonl(INADDR_ANY);

if(bind(sServer, (SOCKADDR *)&serv_addr, sizeof(serv_addr))<0)
{
printf("bind err");
return -1;
}
if(listen(sServer,5)==SOCKET_ERROR)
{
printf("Listen error!\n");
return -1;
}
memset(&l_addr,0,sizeof(l_addr));
AcceptSocket = accept(sServer,(SOCKADDR*)&l_addr,&len);
while (1) {

if(AcceptSocket >= 0 && AcceptSocket !=SOCKET_ERROR)
{
printf("Now the link has been connected.\n");
memset(recvmsg, 0, MAXSIZE);
SYSTEMTIME sys;
GetLocalTime(&sys);
sprintf(recvmsg,"%4d%02d%02d-%02d%02d%02d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond);
if (!send(AcceptSocket,recvmsg,sizeof(recvmsg),0))
{
printf("send err!\n");
break;
}
}
else
{
printf("accept error!\n");
continue;
}

Sleep(40);
}
closesocket(sServer);
WSACleanup();
return 0;
}
...全文
评论 2
收藏 已收藏
分享
返回顶部
zhgw963852
通信技术 4,397 成员 28,909 内容