两台虚拟机Linux系统socket通信

服务器:

#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <time.h>

#define SERVER_PORT 20000 // define the defualt connect port id
#define LENGTH_OF_LISTEN_QUEUE 10 //length of listen queue in server
#define BUFFER_SIZE 255
#define WELCOME_MESSAGE "welcome to connect the server. "

int main(int argc, char **argv)
{
       int servfd,clifd;
       struct sockaddr_in servaddr,cliaddr;
       if ((servfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
       {
              printf("create socket error!/n");
              exit(1);
       }
       bzero(&servaddr,sizeof(servaddr));
       servaddr.sin_family = AF_INET;
       servaddr.sin_port = htons(SERVER_PORT);
       servaddr.sin_addr.s_addr = htons(INADDR_ANY);
      
       if (bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
       {
              printf("bind to port %d failure!/n",SERVER_PORT);
              exit(1);
       }
 
       if (listen(servfd,LENGTH_OF_LISTEN_QUEUE) < 0)
       {
              printf("call listen failure!/n");
              exit(1);
       }

       while (1)

       {//server loop will nerver exit unless any body kill the process
              char buf[BUFFER_SIZE];
              long timestamp;
              socklen_t length = sizeof(cliaddr);
              clifd = accept(servfd,(struct sockaddr*)&cliaddr,&length);
              if (clifd < 0)
              {
                     printf("error comes when call accept!/n");
                     break;
              }
              strcpy(buf,WELCOME_MESSAGE);
              //inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);       
              printf("from client,IP:%s,Port:%d/n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
              timestamp = time(NULL);
              strcat(buf,"timestamp in server:");
              strcat(buf,ctime(&timestamp));
              send(clifd,buf,BUFFER_SIZE,0);
              close(clifd);          
          

       }//exit

       close(servfd);

       return 0;

}

 

 

 

客户机

#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>

#define SERVER_PORT 20000 // define the defualt connect port id
#define CLIENT_PORT ((20001+rand())%65536) // define the defualt client port as a random port
#define BUFFER_SIZE 255
#define REUQEST_MESSAGE "welcome to connect the server./n"

void usage(char *name)
{
       printf("usage: %s IpAddr/n",name);
}
 
int main(int argc, char **argv)
{    
       int servfd,clifd,length = 0;
       struct sockaddr_in servaddr,cliaddr;
       socklen_t socklen = sizeof(servaddr);
       char buf[BUFFER_SIZE];    

       if (argc < 2)
       {
              usage(argv[0]);
              exit(1);
       }
      
       if ((clifd = socket(AF_INET,SOCK_STREAM,0)) < 0)
       {
              printf("create socket error!/n");
              exit(1);
       }

       srand(time(NULL));//initialize random generator
       bzero(&cliaddr,sizeof(cliaddr));
       cliaddr.sin_family = AF_INET;
       cliaddr.sin_port = htons(CLIENT_PORT);
       cliaddr.sin_addr.s_addr = htons(INADDR_ANY);
       bzero(&servaddr,sizeof(servaddr));
       servaddr.sin_family = AF_INET;
       inet_aton(argv[1],&servaddr.sin_addr);
       servaddr.sin_port = htons(SERVER_PORT);

       //servaddr.sin_addr.s_addr = htons(INADDR_ANY);
       if (bind(clifd,(struct sockaddr*)&cliaddr,sizeof(cliaddr))<0)
       {
              printf("bind to port %d failure!/n",CLIENT_PORT);
              exit(1);
       }

       if (connect(clifd,(struct sockaddr*)&servaddr, socklen) < 0)
       {
              printf("can't connect to %s!/n",argv[1]);
              exit(1);
       }     

       length = recv(clifd,buf,BUFFER_SIZE,0);
       if (length < 0)
       {
              printf("error comes when recieve data from server %s!",argv[1]);
              exit(1);
       }
       printf("from server %s :/n/t%s ",argv[1],buf);
       close(clifd);

       return 0;

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值