当前位置: 首页 > article >正文

socket()函数的概念和使用案例

socket()函数的概念(C语言)

在C语言中,socket() 函数是用于创建一个新的套接字,它是网络编程的基础。套接字可以看作是不同计算机进程间通信的一个端点,允许数据在网络中的发送和接收。
socket() 函数的原型定义在 <sys/socket.h> 头文件中,如下所示:

int socket(int domain, int type, int protocol);
  • domain:指定套接字的通信域,例如 AF_INET 表示IPv4协议,AF_INET6 表示IPv6协议。
  • type:指定套接字的类型,例如 SOCK_STREAM 表示流式套接字(用于TCP),SOCK_DGRAM 表示数据报套接字(用于UDP)。
  • protocol:通常设置为0,表示选择默认协议。当指定了 type 时,这个参数通常是不必要的,因为类型已经隐含了协议。
    socket() 函数成功时返回一个小的非负整数值,称为套接字描述符,失败时返回-1。

使用案例

案例1:创建TCP客户端

以下是一个简单的C语言TCP客户端示例,它连接到一个服务器,发送一条消息,然后接收服务器的响应。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 
void error(const char *msg) {
    perror(msg);
    exit(0);
}
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]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    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);
    if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");
    printf("Please enter the message: ");
    bzero(buffer,256);
    fgets(buffer,255,stdin);
    
    n = write(sockfd,buffer,strlen(buffer));
    if (n < 0) 
         error("ERROR writing to socket");
    
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    if (n < 0) 
         error("ERROR reading from socket");
    printf("%s\n",buffer);
    
    close(sockfd);
    return 0;
}

在这个例子中,程序创建了一个TCP套接字,连接到由命令行参数指定的服务器和端口,然后发送用户输入的消息,并打印出服务器的响应。
请注意,为了简化示例,错误处理只是打印错误消息并退出程序。在实际应用中,应该有更完善的错误处理机制。此外,这个客户端只能发送和接收一次消息,它不是一个持续运行的客户端。


http://www.kler.cn/a/557582.html

相关文章:

  • Android:权限permission申请示例代码
  • C++ 设计模式-模板方法模式
  • 【Python】Python顺序语句经典题合集
  • java开发——为什么要使用动态代理?
  • hot100_74. 搜索二维矩阵
  • Unity FBXExport导出的FBX无法在Blender打开
  • ZT7 小红的排列构造
  • 【Python爬虫(46)】解锁分布式爬虫:实时数据处理的奥秘
  • 在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
  • 人工智能三剑客:符号主义、连接主义与行为主义的较量与融合
  • RocketMQ事务消息原理
  • 爬虫小案例豆瓣电影top250(json格式)
  • C++如何获取windows系统通知消息列表
  • RoCBert:具有多模态对比预训练的健壮中文BERT
  • 【Qt】可爱的窗口关闭确认弹窗实现
  • Svelte 最新中文文档教程(16)—— Context(上下文)
  • 微信小程序数据绑定与事件处理:打造动态交互体验
  • Ubuntu 22.04 Install deepseek
  • MongoDB应用设计调优
  • My Metronome for Mac v1.4.2 我的节拍器 支持M、Intel芯片