Linux下Socket服务器与客户端编程

对于Socket编程零基础,同时也没有在linux下编程的经验,分享给和我一样的朋友。

服务器接收客户端多次传过来消息,同时返回给客户端进行循环处理。服务器得起一个线程,处理客户端传过来的消息,否则服务器与客户端只能通讯一次。


客户端:code

#include <sys/types.h>  
#include <sys/socket.h>  
#include <sys/un.h>  
#include <unistd.h>  
#include <stdlib.h>  
#include <stdio.h>  
  
int main()  
{  
  /* create a socket */  
  int sockfd = socket(AF_UNIX, SOCK_STREAM, 0);  
    
  struct sockaddr_un address;  
  address.sun_family = AF_UNIX;  
  strcpy(address.sun_path, "/tmp/temp.socket");   
  /* connect to the server */  
  /* exchange data */  
  char ch = 'A'; 


  int result = connect(sockfd, (struct sockaddr *)&address, sizeof(address));
  if(result == -1)
  {
     perror("connect failed: ");
     exit(1);
  }
  int i = 0;
  while( i < 26) // 循环传递 A-Z字符
  {

      printf("send char to server: %c\n", ch);
      write(sockfd, &ch, 1);  
      read(sockfd, &ch, 1);  
      printf("recive char from server: %c\n", ch);  
      i++;
  } 
  close(sockfd);

  return 0;  
  
}  


服务器端:code

#include <sys/types.h>  
#include <sys/socket.h>  
#include <sys/un.h>  
#include <unistd.h>  
#include <stdlib.h>  
#include "pthread.h"
#include <stdio.h>  
  

void* fun_st(void *socketClient)
{
  int *socketCtl2 = (int*)socketClient;
  char ch; 
  while(1)
  {
     printf("recive char from client: %c\n",ch);
     read(*socketCtl2,&ch, 1);
     ++ch;
     printf("send char to client: %c\n",ch);
     write(*socketCtl2,&ch, 1);
  }   
}

int main()  
{  
  /* delete the socket file */  
  unlink("/tmp/temp.socket");  
    
  /* create a socket */  
  int server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);  
    
  struct sockaddr_un server_addr;  
  server_addr.sun_family = AF_UNIX;  
  strcpy(server_addr.sun_path, "/tmp/temp.socket");  
    
  /* bind with the local file */  
  bind(server_sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));  
    
  /* listen */  
  listen(server_sockfd, 5);  
    
  char ch;  
  int client_sockfd;  
  struct sockaddr_un client_addr;  
  socklen_t len = sizeof(client_addr);
    
  printf("server waiting:\n");       
  int i =0;
    /* accept a connection */ 
  while(1)
  {  

    pthread_t pid;
    client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_addr, &len);
    if(client_sockfd == -1)
    {
       break;
    }
    pthread_create(&pid,NULL,fun_st,(void *)&client_sockfd);    
  
  }  
  close(client_sockfd);
  close(server_sockfd);
  return 0;  
}  

服务器端编译的时候需要加上-pthread,否则编译不过。


猜你喜欢

转载自blog.csdn.net/anan1205/article/details/51837984