博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++网络编程--简单的WinSock代码
阅读量:5339 次
发布时间:2019-06-15

本文共 1533 字,大约阅读时间需要 5 分钟。

//注意要引用WinSock2的lib文件,否则编译不会通过

#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));

 //关闭Socket收发功能

 shutdown(AcceptSocket,0);

 closesocket(AcceptSocket);

 closesocket(Socket);

 //取消被阻塞的Socket

 if(WSAIsBlocking()) WSACancelBlockingCall();
 
 //释放WinSock资源
 WSACleanup();
 
 return 0;
}

转载于:https://www.cnblogs.com/MaxWoods/archive/2007/10/22/933689.html

你可能感兴趣的文章
原生JS轮播-各种效果的极简实现
查看>>
软件工程总结作业---提问回顾与个人总结
查看>>
计数器方法使用?
查看>>
带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
查看>>
sonar结合jenkins
查看>>
解决VS+QT无法生成moc文件的问题
查看>>
AngularJs练习Demo14自定义服务
查看>>
stat filename
查看>>
关于空想X
查看>>
CF1067C Knights 构造
查看>>
【算法•日更•第三十二期】教你用出windows体验的Linux
查看>>
[BZOJ2938] 病毒
查看>>
webstorm修改文件,webpack-dev-server不会自动编译刷新
查看>>
[NOIP2009] 靶形数独
查看>>
【Python网络编程】利用Python进行TCP、UDP套接字编程
查看>>
在百度和博客园发表地文章被爬索的速度比较
查看>>
Scikit-learn 库的使用
查看>>
CSS: caption-side 属性
查看>>
python 用数组实现队列
查看>>
认证和授权(Authentication和Authorization)
查看>>