CSDN博客

img a77248848

C++下实现的Socket传送数组

发表于2008/10/3 6:24:00  5023人阅读

分类: c++学习

前段时间据说使要做分布式计算,要做这个简单的东西,只知道如何传字符窜,不知道如何传整数,数组,结构体,搞了大半夜才知道:原来很简单.........................................

下面贴出代码。

首先是服务器端:

  1. #include <Winsock2.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <iostream.h>
  5. #define MAXLEN 3 //数组长度
  6. int recvpacket[MAXLEN];
  7. int countdata();
  8. void main()
  9. {
  10.     //socket版本
  11.     WORD wVersion;
  12.     WSADATA wsaData;
  13.     int err;
  14.     wVersion=MAKEWORD(1,1);
  15.     err=WSAStartup(wVersion,&wsaData);
  16.     if(err!=0)
  17.     {
  18.         return;
  19.     }
  20.     if((LOBYTE(wsaData.wVersion)!=1)||(HIBYTE(wsaData.wVersion)!=1))
  21.     {
  22.         WSACleanup();
  23.         return;
  24.     }
  25.     //建立socket
  26.     SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
  27.     SOCKADDR_IN addSrv;
  28.     addSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
  29.     addSrv.sin_family=AF_INET;
  30.     addSrv.sin_port=htons(6161);
  31.     bind(sockSrv,(SOCKADDR*)&addSrv,sizeof(SOCKADDR));//绑定
  32.     listen(sockSrv,5);//监听
  33.     int len=sizeof(SOCKADDR);
  34.     SOCKADDR_IN addClient;
  35.     while(1)
  36.     {
  37.         SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addClient,&len);
  38.         char sendBuf[100];
  39.         sprintf(sendBuf,"你已经成功连接到服务器,请等待...");
  40.         send(sockConn,sendBuf,strlen(sendBuf)+1,0);//发送欢迎消息
  41.         
  42.         recv(sockConn,(char *)&recvpacket,sizeof(recvpacket),0);//接收数组
  43.         
  44.         int myresult=countdata();//计算数组     
  45.         send(sockConn,(char *)&myresult,sizeof(myresult),0);//发送结果
  46.         closesocket(sockConn);      
  47.     }   
  48. }
  49. //计算
  50. int countdata()
  51. {
  52.     int s=0;
  53.     for (int i=0;i<MAXLEN;i++)
  54.     {
  55.         s=s+recvpacket[i];
  56.     }   
  57.     return s;
  58. }

 

写了点注释....应该可以看懂。(char *)&m  m可以是数,结构体,字符。结构体的话,后面是sizeof(m)+2 我对地址 指针很头大......不要问为什么......

 

客户端:

 

  1. #include <Winsock2.h>
  2. #include <stdio.h>
  3. #include <iostream.h>
  4. #include <stdlib.h>
  5. #define MAXLEN 3
  6. int sendpacket[MAXLEN];
  7. void getdata();
  8. void main()
  9. {   
  10.     WORD wVersion;
  11.     WSADATA wsaData;
  12.     int err;
  13.     wVersion=MAKEWORD(1,1);
  14.     err=WSAStartup(wVersion,&wsaData);
  15.     if(err!=0)
  16.     {
  17.         return;
  18.     }
  19.     if((LOBYTE(wsaData.wVersion)!=1)||(HIBYTE(wsaData.wVersion)!=1))
  20.     {
  21.         WSACleanup();
  22.         return;
  23.     }
  24.     SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
  25.     SOCKADDR_IN addSrv;
  26.     addSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
  27.     addSrv.sin_family=AF_INET;
  28.     addSrv.sin_port=htons(6161);
  29.     connect(sockClient,(SOCKADDR*)&addSrv,sizeof(SOCKADDR));
  30.     char recvBuf[100];
  31.     recv(sockClient,recvBuf,100,0);
  32.     printf("%s/n",recvBuf);
  33.     
  34.     getdata();
  35.     send(sockClient,(char *)&sendpacket,sizeof(sendpacket),0);
  36.     int myresult;
  37.     recv(sockClient,(char *)&myresult,sizeof(myresult),0);
  38.     cout<<myresult<<endl;
  39.     closesocket(sockClient);
  40.     WSACleanup();
  41. }
  42. void getdata()
  43. {   
  44.     cout<<"请输入"<<MAXLEN<<"个整数:"<<endl;
  45.     for (int i=0;i<MAXLEN;i++)
  46.     {
  47.         cin>>sendpacket[i];
  48.     }
  49. }

 

最后不要忘记加上lib

好了,吃早餐了.................. 

0 0

相关博文

我的热门文章

img
取 消
img