<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      使用socket編寫windows與linux通訊程序

      [摘要]socket編程大家都很熟悉,我在這里就不再羅嗦了。直接切入正題。該程序分兩部分,server端和client端(誰都知道)。其中server端采用windows平臺,那linux平臺當然是clie...
          socket編程大家都很熟悉,我在這里就不再羅嗦了。直接切入正題。該程序分兩部分,server端和client端(誰都知道)。其中server端采用windows平臺,那linux平臺當然是client端了。
      這里是server端程序:
      /**********************************/
      /* it worked as server under windows platform */
      /* written by mlsx 1998-2-7                     */
      /************************************/

      include <windows.h>
      #include <stdio.h>
      #pragma comment (lib,"WS2_32.lib")
      #define USERPORT 10001
      #define HOST_IP_ADDR "127.0.0.1"

      main(int argc,char *argv[])
      {
      char buf[128];
      SOCKET s,ns;
      struct sockaddr_in client;
      struct sockaddr_in server;
      int namelen,pklen;
      int status;
      WSADATA wsd;
      if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0)
      {
        perror("wsastartup() failed:");
         exit(1);
      }
      if((s=socket(AF_INET,SOCK_STREAM,0))< 0)
      {
        perror("socket failed :");
        exit(1);
      }
      ZeroMemory(&server,sizeof(server));
      server.sin_family=AF_INET;
      server.sin_port=htons(USERPORT);
      server.sin_addr.s_addr=htons(INADDR_ANY);
      if(bind(s,(struct sockaddr *)&server,sizeof(server))<0)
      {
        perror("bind() failed:");
        exit(2);
      }
      if(listen(s,4)!=0)
      {
        perror("listen()failed :");
        exit(3);
      }
      while(1)
      {
      namelen=sizeof(client);
      if((ns=accept(s,(struct sockaddr*)&client,&namelen))==-1)
      {
        perror("accept()failed:");
        exit(4);
      }
      printf("accept successful");
      for(;;)
      {
        if((pklen=recv(ns,buf,128,0))<0)
        {
         perror("recv() failed:");
         exit(5);
        }
        else
         if(pklen==0)
         {
          printf("recv():return FAILED,connected is shut down");
          break;
         }
         else
          printf("recv():return success,packet length=%d context is %s\n",pklen,buf);
        
        Sleep(1);
        //printf("the buf is %s\n",buf);
        if(send(ns,buf,128,0)<0)
        {
         perror("send() failed:");
         break;
        }
        else
         printf("send() return success packet length is %d\n",pklen);
      }
      }
      closesocket(ns);
      closesocket(s);
      printf("server ended successfully\n");
      }



      這里是client端程序:

      /**********************************/
      /* it worked as client under linux platform */
      /* written by mlsx 1998-2-7                     */
      /************************************/
      #include <windows.h>
      //#include <winsock2.h>
      #include <stdio.h>
      #pragma comment (lib,"WS2_32.lib")
      #define USERPORT 5003
      main(int argc,char *argv[])
      {
      char buf[128];
      SOCKET sclient;
      struct sockaddr_in server;
      int namelen,pklen;
      int status,ret;
      char szmessage[128];
      WSADATA wsd;
      if(argc<2)
      {
        printf("usage:\n");
        printf("%s ipaddr",__FILE__);
        printf("ipaddr is the server's ip address,like xxx.xxx.xxx.xxx\n");
        exit(1);
      }
      if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0)
      {
        perror("wsastartup() failed:");
         exit(1);
      }
      if((sclient=socket(AF_INET,SOCK_STREAM,0))< 0)
      {
        perror("socket failed :");
        exit(1);
      }
      ZeroMemory(&server,sizeof(server));
      ZeroMemory(szmessage,sizeof(szmessage));
      server.sin_family=AF_INET;
      server.sin_port=htons(USERPORT);
      server.sin_addr.s_addr=inet_addr(argv[1]);
      if(connect(sclient,(struct sockaddr *)&server,sizeof(server))<0)
      {
        perror("connect() failed :");
        printf("%d",WSAGetLastError());
        exit(3);
      }
      namelen=sizeof(sclient);

      /*for(ret=0;ret<10;ret++)
      {
        
        if(send(sclient,szmessage,sizeof(szmessage),0)<0)
        {
         perror("send() failed:");
         break;
        }

        printf("send() return success\n  context is %s \n",szmessage);
        if((pklen=recv(sclient,buf,sizeof(buf),0))<0)
        {
         perror("recv() failed:");
         exit(5);
        }
        else
         if(pklen==0)
         {
          printf("recv():return FAILED,connected is shut down");
          break;
         }
         else
         {
          printf("the pktlen is %d\n",pklen);
          buf[pklen]='\0';
          printf("recv():return success\npacket length=%d and the context is %s\n",pklen,buf);
          ZeroMemory(buf,sizeof(buf));
         }
         Sleep(10);
      }*/
      //while(strcmp(szmessage,"q"))
      while(1)
      {
        
        ZeroMemory(szmessage,sizeof(szmessage));
        //scanf("%s",szmessage);
        //puts(szmessage);
        //gets(szmessage);
        //send(sclient,szmessage,sizeof(szmessage),0);
        //Sleep(10);
        ZeroMemory(buf,sizeof(buf));
        ret=recv(sclient,buf,sizeof(buf),0);
        buf[ret]='\0';
        //printf("%s the length is %d ",buf,ret);
        puts(buf);
        Sleep(1);
        
      }

        
      closesocket(sclient);
      WSACleanup();
      printf("server ended successfully\n");
      return 0;
      }


      日韩精品一区二区三区高清