日期:2014-05-16  浏览次数:20765 次

VC与linux下socket通讯
VC下的server端程序和linux下的client端程序, 不知道为什么通讯不了,知道的说下,谢谢,代码如下:
server端pc下VC编译
#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[])
{
printf("begin at main \n");
 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);
 }
  printf("WSAStartup end \n");
//if((s=socket(AF_INET,SOCK_STREAM,0))< 0)
if((s=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP))< 0)
 {
  perror("socket failed :");
exit(1);
 }
  printf("socket end \n");
 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);
 }
 printf("bind end \n");
 if(listen(s,4)!=0)
 {
  perror("listen()failed :");
  exit(3);
}
printf("listen end \n");
 while(1)
 {
 namelen=sizeof(client);
 if((ns=accept(s,(struct sockaddr*)&client,&namelen))==-1)
 {
perror("accept()failed:");
exit(4);
 }
 printf("accept successful\n");
 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端 linux下gcc编译
#include <netinet/in.h>    // for sockaddr_in
#include <sys/types.h>    // for socket
#include <sys/socket.h>    // for socket
#include <stdio.h>        // for printf
#include <stdlib.h>        // for exit
#include <string.h>        // for bzero
#include <pthread.h>
#include <sys/errno.h>    // for errno
#include&