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

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

相关文章:

  • Java 使用websocket
  • 【Linux】34.封装 UdpSocket(1)
  • 【读书笔记·VLSI电路设计方法解密】问题53:什么是逻辑综合
  • bind()函数的概念和使用案例
  • WPF实现打印机控制及打印
  • JavaScript 数组连接方法
  • java中的Entry类,map接口
  • 值传递,引用传递
  • TIP: Flex-DLD
  • 人工智能学习环境配置
  • HTTP Keep-Alive:性能优化的关键机制
  • 排序链表--字节跳动
  • Pytorch框架03-网络的搭建(nn.Module/卷积层/池化层/非线性激活/线性层/CIFAR-10分类模型搭建)
  • devops 工具 网络安全
  • Java数据结构-排序
  • 微信小程序-组件复用机制behaviors
  • Mono里运行C#脚本43—System.Console.WriteLine()函数的生成过程
  • ThinkORM模型静态方法create好像对MongoDB不支持
  • 深度学习-7.超参数优化
  • CSS按钮点击效果实战:scale(0.95) 与10个交互动画优化指南
  • 咸宁市委常委、市纪委书记官书云调任湖北省司法厅副厅长
  • 沃旭能源因成本上升放弃英国海上风电项目,或损失近40亿元
  • 习近平出席俄罗斯纪念苏联伟大卫国战争胜利80周年庆典
  • 正荣地产:董事会主席、行政总裁辞任,拟投入更多精力推动境内债重组等工作
  • 如此城市|上海老邬:《爱情神话》就是我生活的一部分
  • 东亚社会的“苦难诗学”:从《苦尽柑来遇见你》说起