socket的VC++实现

       服务器端与客户端区别 :

       摘自http://topic.csdn.net/u/20070124/10/9cf2284c-1cbf-4187-b309-8e5f0bea6f33.html的一段话

       客户端程序和服务器端程序通常是多对一的关系,
       即一个服务器端程序,面向众多客户端提供数据服务。 

       程序看具体情况,才能确定是否分两部分来写。
          1.网站:只写服务端,浏览器就是客户端程序了,不用再写,这就是   B/S   结构的优势,部署、更新容易
          2.类似QQ、网游的:两边都要写,这就是为什么你自己下载   QQ   升级的原因        

       FPGA 与 PC谁是客户谁是服务呢,首先是一对一,没有应用程序,还谈不少客户与服务吧,只是接收和发送的关系吧。

 

 附录经过测试的程序,测试环境为VC++6.0

#include <stdio.h>
#include <Winsock2.h>
#pragma comment(lib, "ws2_32.lib")
void main(void)
{
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    if(iResult != NO_ERROR)
        printf("Error at WSAStartup()\n");
 FILE *fp;
 fp=fopen("jpeg.FPGA","wb");
 SOCKET socket1;
 struct sockaddr_in local;
 struct sockaddr_in from;
 int fromlen =sizeof(from);
 local.sin_family=AF_INET;
 local.sin_port=htons(1024); ///监听端口
 local.sin_addr.s_addr=inet_addr("192.168.1.216"); ///本机

 socket1=socket(AF_INET,SOCK_DGRAM,0);//创建socket AF_INET代表TCP IP协议族  SOCK_DGRAM代表UDP O  为o
 bind(socket1,(struct sockaddr*)&local,sizeof local);//对端口进行监听
 while (1)
 {
  char buffer[1024]="\0";
  printf("waiting for message from others-------------\n");
  if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)//接收数据
  {
   printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);
   fprintf(fp,"Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);//创建文件,将接收到的文件存入到 jpeg.FPGA中

  // fprintf(fp,"%s\n",buffer);

   ////给cilent发信息
  // sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);

  }
  Sleep(500);
 }
 closesocket(socket1);
  fclose(fp);
}

 

           

posted on 2012-07-27 10:52  红色理想  阅读(976)  评论(0编辑  收藏  举报

导航