Unix Socket - 客户端示例

为了使一个进程成为一个TCP客户端,你需要遵循下面给出的步骤−

使用socket()系统调用创建一个套接字。

使用Connect()系统调用将套接字连接到服务器的地址。

发送和接收数据。有很多方法可以做到这一点,但最简单的方法是使用read()和write()系统调用。

现在让我们将这些步骤以源代码的形式呈现出来。将这段代码放到client.c文件中,并用gcc编译器编译它。

运行这个程序并传递服务器的主机名和端口号,以连接到服务器,您必须已经在另一个Unix窗口中运行了服务器。

#include <stdio.h>

#include <stdlib.h>

#include <netdb.h>

#include <netinet/in.h>

#include <string.h>

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

   int sockfd, portno, n;

   struct sockaddr_in serv_addr;

   struct hostent *server;


   char buffer[256];


   if (argc < 3) {

      fprintf(stderr,"usage %s hostname port\n", argv[0]);

      exit(0);

   }


   portno = atoi(argv[2]);


   /* Create a socket point */

   sockfd = socket(AF_INET, SOCK_STREAM, 0);


   if (sockfd < 0) {

      perror("ERROR opening socket");

      exit(1);

   }


   server = gethostbyname(argv[1]);


   if (server == NULL) {

      fprintf(stderr,"ERROR, no such host\n");

      exit(0);

   }


   bzero((char *) &serv_addr, sizeof(serv_addr));

   serv_addr.sin_family = AF_INET;

   bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);

   serv_addr.sin_port = htons(portno);


   /* Now connect to the server */

   if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {

      perror("ERROR connecting");

      exit(1);

   }


   /* Now ask for a message from the user, this message

      * will be read by server

   */


   printf("Please enter the message: ");

   bzero(buffer,256);

   fgets(buffer,255,stdin);


   /* Send message to the server */

   n = write(sockfd, buffer, strlen(buffer));


   if (n < 0) {

      perror("ERROR writing to socket");

      exit(1);

   }


   /* Now read server response */

   bzero(buffer,256);

   n = read(sockfd, buffer, 255);


   if (n < 0) {

      perror("ERROR reading from socket");

      exit(1);

   }


   printf("%s\n",buffer);

   return 0;

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容