
程序代码:
#include <stdio.h>
#include <Winsock2.h>
#include <Windows.h>
SOCKET cln_socket;
SOCKADDR_IN addr;
SOCKADDR_IN ser_addr;
int cz=sizeof(SOCKADDR_IN);
DWORD CALLBACK New_Thread(LPVOID lpParameter);
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
cln_socket=socket(AF_INET,SOCK_DGRAM,0);
//HANDLE h_thread=CreateThread(NULL,0,New_Thread,0,0,0);
//CloseHandle(h_Thread);
ser_addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
ser_addr.sin_port=htons(9527);
ser_addr.sin_family=AF_INET;
char sendbuf[200]={'\0'};
HANDLE h_Thread=CreateThread(NULL,0,New_Thread,0,0,0);
CloseHandle(h_Thread);
while(true)
{
gets(sendbuf);
sendto(cln_socket,sendbuf,200,0,(SOCKADDR*)&ser_addr,cz);
}
closesocket(cln_socket);
}
DWORD CALLBACK New_Thread(LPVOID lpParamter)
{
char recvbuf[200]={'\0'};
while(true)
{
recvfrom(cln_socket,recvbuf,200,0,(SOCKADDR*)&ser_addr,&cz);
if(recvbuf[0]!='\0')
{
//printf("hhhh\n");
printf("%s :%s\n",inet_ntoa(ser_addr.sin_addr),recvbuf);
}
}
}
以上是客户端代码
最后一个问题
为什么客户端发送一次数据之后才能接受到服务端的数据