鱼C论坛

 找回密码
 立即注册
查看: 2217|回复: 0

[技术交流] 给大家分享点最近在学的东西~winsock网络编程的

[复制链接]
发表于 2014-12-28 00:55:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近在写通信程序,给大家分享点简单的小东西.是用来实现通信的,
一个Server端 一个Client端~实现的就是Client可以给Server发消息,
对网络编程有兴趣的朋友可以学习一下,当然这只是最基础的..
学完c或者c++可以看一看,大神就略过好了...
都是基于Socket来实现,然后模拟HTTP协议,或者局域网通信什么的都可以基于这个实现.
需要注意的是Server和Client分开来编译,先运行Server,再运行Client,
运行起来之后也许会有网络的系统提示跳出来.允许了就好,当然要是不放心,你可以断了网来弄,,默认的都是你本机的IP.
暂时只能实现Client给Server发消息,没有弄线程什么的.要是想实现QQ那样的得在往上加工很多东西~~这只是个简单的分享~
  1. //Server//
  2. #include<stdio.h>
  3. #include<winsock2.h>   //Windows Socket 头文件
  4. #include<string.h>

  5. #pragma comment(lib,"WS2_32.lib")   //Windows Socket所需要添加的动态库


  6. //全局变量//
  7. WORD Version;           //确定winsock的版本
  8. WSADATA WSAdata;        //信息返回的变量   
  9. SOCKET ServSocket;        //socket 名称
  10. SOCKADDR_IN Server;         
  11. SOCKET ClientSocket;        //socket 名称
  12. SOCKADDR_IN Client;         


  13. //函数定义//
  14. int INIT();
  15. int InitSocket();
  16. int BIND();
  17. int  LISTEN();
  18. int Accept();
  19. int RECV();
  20. void  Exit();

  21. int InitSocket()                                           //创建套接字.
  22. {
  23.         DWORD error ;
  24.         Version=MAKEWORD(2,2);                                //winsock版本2.2
  25.         if(WSAStartup(Version,&WSAdata)!=ERROR_SUCCESS)       //请求winsock2.2版
  26.         {
  27.                 error = GetLastError();
  28.                 printf("Windows Socket is not responded\n%d\n ",error);       //错误返回.
  29.                 system("pause");
  30.                 exit(0);
  31.         }
  32.         ServSocket=INVALID_SOCKET;
  33.         ServSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  34.         if(ServSocket==INVALID_SOCKET)
  35.         {
  36.                 error = GetLastError();
  37.                 printf("Windows Socket can't be open\n%d\n",error); //错误返回.
  38.                 system("pause");
  39.                 exit(0);
  40.         }
  41.         printf("Socket Is Ready\n");
  42.         return 0;
  43. }

  44. int BIND()
  45. {
  46.         int ret=-1;
  47.         DWORD error ;
  48.         Server.sin_addr.s_addr =INADDR_ANY;
  49.         Server.sin_family=AF_INET;                                
  50.         Server.sin_port=htons(2222);
  51.     ret=bind(ServSocket,(SOCKADDR*)&Server,sizeof(Server));
  52.         if(ret==SOCKET_ERROR)
  53.         {
  54.                 error = GetLastError();
  55.                 printf("Bind error \n%d\n",error);
  56.                 system("pause");
  57.                 exit(0);
  58.         }
  59.         printf("Bind seccess\n");
  60.         return 0;
  61. }

  62. int  LISTEN()
  63. {
  64.         DWORD error;
  65.         int ret=listen(ServSocket,2);  
  66.         if(ret==SOCKET_ERROR)  
  67.         {  
  68.                 error = GetLastError();
  69.                 printf(" listen error %d\n",error);
  70.                 system("pause");
  71.                 exit(0);
  72.         }  
  73.         printf("Listen seccess\n");
  74.         return 0;
  75. }

  76. int Accept()
  77. {       
  78.         int x=sizeof(Client);
  79.         ClientSocket=INVALID_SOCKET;
  80.         ClientSocket=accept(ServSocket,(SOCKADDR *)&Client,&x);
  81.         if(ClientSocket==INVALID_SOCKET)
  82.         {
  83.                 printf("Accept error\n");
  84.         }
  85.         return 0;
  86. }

  87. int RECV()
  88. {
  89.         int x=0;
  90.         char str[1024];
  91.         while(1)
  92.         {
  93.                 memset(str,0,sizeof(str));
  94.                 x=recv(ClientSocket,str,sizeof(str),0);
  95.                 if(x>=0)
  96.                 {
  97.                 printf("%s\n",str);
  98.                 }
  99.                 else
  100.                 {
  101.                         printf("客户端关闭");
  102.                         Exit();
  103.                 }
  104.                 Sleep(200);
  105.         }
  106.         return 0;
  107. }

  108. int INIT()
  109. {
  110.         InitSocket();
  111.         BIND();
  112.         LISTEN();
  113.         Accept();
  114.         return 0;
  115. }

  116. void  Exit()
  117. {
  118.         closesocket(ServSocket);  //关闭socket.
  119.         closesocket(ClientSocket);
  120.         WSACleanup();    //进行所有的清除工作.
  121.     exit(0);
  122. }

  123. int main(void)
  124. {
  125.         INIT();
  126.         RECV();
  127.         return 0;
  128. }



  129. //Client//

  130. #include<stdio.h>
  131. #include<winsock2.h>   //Windows Socket 头文件
  132. #include<string.h>

  133. #pragma  comment(lib,"WS2_32.lib")   //Windows Socket所需要添加的动态库


  134. //全局变量//
  135. WORD Version;           //确定winsock的版本
  136. WSADATA WSAdata;        //信息返回的变量   
  137. SOCKET ClientSocket;        //socket 名称
  138. SOCKADDR_IN Server;      
  139. HANDLE hSend;
  140. HANDLE hRecv;

  141. //函数定义//
  142. int InitSocket();
  143. int Connect();
  144. void SEND();
  145. void Exit();

  146. int  InitSocket()                                   //创建套接字.
  147. {
  148.         Version=MAKEWORD(2,2);                     //winsock版本2.2
  149.         if(WSAStartup(Version,&WSAdata)!=ERROR_SUCCESS)    //请求winsock2.2版
  150.         {
  151.                 printf("Windows Socket is not responded\n");    //错误返回.
  152.                 exit(0);
  153.         }
  154.         ClientSocket=INVALID_SOCKET;                        //设置默认为空
  155.         ClientSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  156.         if(ClientSocket==INVALID_SOCKET)
  157.         {
  158.                 printf("Windows Socket can't be open\n");   //错误返回.
  159.                 exit(0);
  160.         }
  161.         return 0;
  162. }


  163. int Connect()        //连接
  164. {
  165.         int ret=1;
  166.         DWORD error;
  167.         Server.sin_addr.s_addr = inet_addr("127.0.0.1");      //本机IP
  168.         Server.sin_family=AF_INET;                                 //使用的协议TCP  
  169.         Server.sin_port=htons(2222);  //端口      
  170.         ret=connect(ClientSocket,(SOCKADDR*)&Server,sizeof(SOCKADDR));  
  171.         if(ret<0)
  172.         {
  173.                 error = GetLastError();
  174.                 printf("connect error. err.num:%d\n",error);
  175.                 exit(0);
  176.         }
  177.         printf("connect success\n");
  178.         return 0;
  179. }

  180. void SEND()
  181. {
  182.         char str[1024]={0};
  183.         while(1)
  184.         {
  185.                 memset(str,0,sizeof(str));
  186.                 gets(str);
  187.                 send(ClientSocket,str,sizeof(str),0);
  188.         }
  189. }

  190. void Exit()
  191. {
  192.         closesocket(ClientSocket);          //关闭socket.
  193.         WSACleanup();
  194.         exit(0);//进行所有的清除工作.
  195. }

  196. int main()
  197. {
  198.         InitSocket();
  199.         Connect()     ;
  200.         SEND();
  201.         return 0;
  202. }
复制代码



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 22:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表