18,356
社区成员
发帖
与我相关
我的任务
分享
recvfrom
void main(){
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested =MAKEWORD(1,1);
err =WSAStartup(wVersionRequested,&wsaData);
if(err!=0){return ;}
if( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) !=1 )
{
WSACleanup();
}
SOCKADDR_IN addrClient;
SOCKADDR_IN addSrv;
SOCKET sockSrv;
sockSrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addSrv;
addSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addSrv.sin_family=AF_INET;
addSrv.sin_port=htons(5000);
bind(sockSrv,(SOCKADDR*)&addSrv,sizeof(SOCKADDR));
DWORD WINAPI FunProc1( LPVOID lpParameter);
DWORD WINAPI FunProc2( LPVOID lpParameter);
HANDLE hthread1,hthread2;
hthread1=CreateThread(NULL,0,FunProc1,NULL,0,NULL);
hthread2=CreateThread(NULL,0,FunProc2,NULL,0,NULL);
CloseHandle(hthread1);
CloseHandle(hthread2);
closesocket(sockSrv);
WSACleanup();
}
DWORD WINAPI FunProc1(LPVOID lpParameter)//接收
{
char recvBuf[100]="";
char buffer[15];
int len=sizeof(SOCKADDR);
while(1)
{recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len); //当客户端没有给服务端发送端发送数据时,
// 重复接收“0.0.0.0 say:”
if('q'==recvBuf[0])
{
sendto(sockSrv,"q",strlen("q")+1,0,(sockaddr*)&addrClient,len);
//sprintf(buffer,"%s","Char end!\n");
break;
}
sprintf(tempBuf,"%s say: %s",inet_ntoa(addrClient.sin_addr),recvBuf);
::SetDlgItemText(handle,IDC_EDIT2,tempBuf);
}
return 0;
}
DWORD WINAPI FunProc2(LPVOID lpParameter)//发送,应该没错
{
char str[200]="";int len=sizeof(SOCKADDR);
while(1)
{
if (press==TRUE)
{
::GetDlgItemText(handle,IDC_EDIT1,str,200);
::SetDlgItemText(handle,IDC_EDIT1,"");
sendto(sockSrv,str,strlen(str)+1,0,(sockaddr*)&addrClient,len);
::SetDlgItemText(handle,IDC_EDIT2,str);
press=false;
}
}
return 0;