18,356
社区成员
发帖
与我相关
我的任务
分享
// socket_client.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"Winsock2.h"
#include<stdio.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//load socket library
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return 0;
}
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return 0;
}
//create socket to listen
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
char recvBuf[100];
char sendBuf[100];
char tempBuf[200];
int len=sizeof(SOCKADDR);
// send data
while(1)
{
printf("please input data\n");
gets(sendBuf);
sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
memset(recvBuf,0,100);
int count=recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrSrv,&len);
cout<<WSAGetLastError()<<endl; //错误代码10054
if('q'==recvBuf[0])
{
sendto(sockClient,"q",strlen("q")+1,0,(SOCKADDR*)&addrSrv,len);
printf("chat end!\n");
break;
}
sprintf(tempBuf,"%s say:%s",inet_ntoa(addrSrv.sin_addr),recvBuf);
printf("%s\n",tempBuf);
}
//close socket
closesocket(sockClient);
WSACleanup();
return 0;
}
这个程序recvfrom是不会阻塞的,朋友,你看看是什么问题?