Linux进程间通信——使用流套接字

2019-09-23 09:09:55王冬梅

客户sockclient.c的源代码如下:

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

int main() 
{ 
  int sockfd = -1; 
  int len = 0; 
  struct sockaddr_in address; 
  int result; 
  char ch = 'A'; 
  //创建流套接字 
  sockfd = socket(AF_INET, SOCK_STREAM, 0); 
  //设置要连接的服务器的信息 
  address.sin_family = AF_INET;//使用网络套接字 
  address.sin_addr.s_addr = inet_addr("127.0.0.1");//服务器地址 
  address.sin_port = htons(9736);//服务器所监听的端口 
  len = sizeof(address); 
  //连接到服务器 
  result = connect(sockfd, (struct sockaddr*)&address, len); 

  if(result == -1) 
  { 
    perror("ops:clientn"); 
    exit(1); 
  } 
  //发送请求给服务器 
  write(sockfd, &ch, 1); 
  //从服务器获取数据 
  read(sockfd, &ch, 1); 
  printf("char form server = %cn", ch); 
  close(sockfd); 
  exit(0); 
} 

运行结果如下:

在本例子中,我们启动了一个服务器程序和三个客户程序,从运行的结果来看,客户端发送给服务器程序的所有请求都得到了处理,即把A变成了B。对于服务器和客户程序之间使用的read和write系统调用跟使用命名管道时阻塞的read、write系统调用一样。例如客户程序调用read时,如果服务器程序没有向指定的客户程序的socket中写入信息,则read调用会一直阻塞。

七、流式套接字给我印象

给我的感觉是流式套接字很像命名管道,但是它却可以使不在同一台计算机而通过网络连接的不同计算机上的进程进行通信,功能真是非常的强大。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持易采站长站!