利用socket編寫windows和linux通訊程式

來源:互聯網
上載者:User

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;
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.