程式很簡單就是想給客戶端發送一點資料,這里發送的時時間字串。
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;
}
uj5u.com熱心網友回復:
檢查回傳值請用 != 正確值 這樣的格式uj5u.com熱心網友回復:
改了,我問的問題沒回答啊?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/124068.html
標籤:網絡通信
上一篇:IP資料包由路由出發的時候,源ip如何設定為路由的虛擬IP
下一篇:外網ping內網問題
