WinSock服务程序
#include <WINSOCK2.H>
#include <stdio.h>
int main(int argc,char** argv)
{
?WSADATA wsaData;
?char HostName[256];
?hostent* HostEnt;
?protoent* ProtoEnt;
?in_addr** Addr;
?char* IPAddr;
?SOCKET Socket;
?sockaddr_in Sin;
?SOCKET AcceptSocket;
?
?//初始化WinSock
?if(WSAStartup(MAKEWORD(2,2),&wsaData))
?{
??printf("Init WinSock failed!\n");
??return 1;
?}
?//獲取主機名
?gethostname(HostName,256);
?printf("%s\n",HostName);
?//獲取主機信息
?HostEnt=gethostbyname(HostName);
?printf("%s\n",HostEnt->h_name);
?
?//枚舉主機IP地址列表
?Addr=(in_addr**)HostEnt->h_addr_list;
?while(*Addr)
?{
??IPAddr=inet_ntoa(**Addr);
??printf("%s\n",IPAddr);
??Addr++;
?}
?
?//建立Socket
?
?ProtoEnt=getprotobyname("TCP");
?
?Socket=socket(AF_INET,SOCK_STREAM,ProtoEnt->p_proto);
?if(Socket<0)
?{??
??printf("Socket error!");
??return 2;
?}
?
?//綁定Socket
?Sin.sin_port=htons(23);
?Sin.sin_family=AF_INET;
?Sin.sin_addr.s_addr=0;
?if(bind(Socket,(sockaddr*)&Sin,sizeof(Sin)))
?{
??printf("%s\n","Socket error!");
??return 3;
?}
?//偵聽請求
?if(listen(Socket,1))
?{
??printf("%s","Socket error!");
??return 4;
?}
?
?//
?while (1)
?{
??AcceptSocket=SOCKET_ERROR;
??while(AcceptSocket==SOCKET_ERROR)
??{
???AcceptSocket=accept(Socket,(sockaddr*)&Sin,NULL);
???? }
??printf( "Client Connected.\n");
??break;
?}
?char msg[]="\r\n==Connected!==\r\n";
?printf("%d\n",send(AcceptSocket,msg,strlen(msg),0));
?//關(guān)閉Socket收發(fā)功能
?shutdown(AcceptSocket,0);
?closesocket(AcceptSocket);
?closesocket(Socket);
?//取消被阻塞的Socket
?if(WSAIsBlocking()) WSACancelBlockingCall();
?
?//釋放WinSock資源
?WSACleanup();
?
?return 0;
}
總結(jié)
以上是生活随笔為你收集整理的WinSock服务程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ4401:块的计数(乱搞)
- 下一篇: (原創) 我有牙周病了 (日記)