歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> Linux下Socket網絡編程(C/S)

Linux下Socket網絡編程(C/S)

日期:2017/3/3 12:55:29   编辑:Linux技術

客戶端

//client.c
#include<stdio h="">
#include<stdlib h="">
#include<string h="">
#include<unistd h="">
#include<sys socket="" h="">
#include<netinet in="" h="">

#define MAXLINE  80
#define SERV_PORT 8000

int main(int argc,char *argv[])
{

     struct sockaddr_in servaddr;
     char buf[MAXLINE];
     int sockfd,n;
     char *str;
     if(argc !=2){
       fputs("usage:./client message\n",stderr);
       exit(1);

      }
      str =argv[1];
      sockfd = socket(AF_INET,SOCK_STREAM,0);
      bzero(&servaddr,sizeof(servaddr));
      servaddr.sin_family = AF_INET;
      inet_pton(AF_INET,"127.0.0.1",&servaddr.sin_addr);
      servaddr.sin_port = htons(SERV_PORT);
      connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
      write(sockfd,str,strlen(str));
      n = read(sockfd,buf,MAXLINE);
      printf("Response from server:\n");
      write(STDOUT_FILENO,buf,n);
      close(sockfd);
      return 0;
}
</netinet></sys></unistd></string></stdlib></stdio>
服務器端
//server.c
#include<unistd h="">
#include<sys socket="" h="">
#include<netinet in="" h="">

#define MAXLINE 80
#define SERV_PORT 8000

int main(void)
{
   struct sockaddr_in servaddr,cliaddr;
   socklen_t cliaddr_len;
   int listenfd,connfd;
   char buf[MAXLINE];
   char str[INET_ADDRSTRLEN];
   int i,n;
   
   listenfd = socket(AF_INET,SOCK_STREAM,0);
   bzero(&servaddr,sizeof(servaddr));
   servaddr.sin_family = AF_INET;
   servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
   servaddr.sin_port = htons(SERV_PORT);
   
   bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
   listen(listenfd,20);
   
   printf("Accepting connections ...\n");
   while(1)
    {

       cliaddr_len = sizeof(cliaddr);
       connfd = accept(listenfd,(struct sockaddr *)&cliaddr,&cliaddr_len);
       n = read(connfd,buf,MAXLINE);
       printf("received from %s at PORT %d\n",inet_ntop(AF_INET,&cliaddr.sin_addr,str,sizeof(str)),ntohs(cliaddr.sin_port));
       for(i = 0;i<n;i++)
       {
          buf[i] = toupper(buf[i]);

       }
       write(connfd,buf,n);
       close(connfd);

    }
 return 0;
}

</netinet></sys></unistd>
詳細請參考:http://www.cnblogs.com/QG-whz/p/5435396.html

Copyright © Linux教程網 All Rights Reserved