Socket 服务端小程序

zhgw963852 2016-11-27 03:42:33
程序很简单就是想给客户端发送一点数据,这里发送的时时间字符串。
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;
}
...全文
358 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhgw963852 2016-11-29
  • 打赏
  • 举报
回复
引用 1 楼 ipqtjmqj 的回复:
检查返回值请用 != 正确值 这样的格式
改了,我问的问题没回答啊?
ipqtjmqj 2016-11-29
  • 打赏
  • 举报
回复
检查返回值请用 != 正确值 这样的格式

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧