您的位置:首页 > 运维架构 > Linux

VC与linux通过socket通讯

2012-10-23 16:45 106 查看
参考:http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息