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

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

相关文章:

  • 常用设计模式(embeded Qt)
  • 主流虚拟化技术讲解
  • 用Python实现的双向链表类,包含了头插、尾插、归并排序等功能
  • 再探动态规划--背包问题
  • 听懂 弦外之音
  • C++算法基础笔记
  • C++STL容器之set
  • IEEE 会议论文作者信息Latex模板
  • 【Bluedroid】AVRCP 连接源码分析(一)
  • VUE四:Vue-cli
  • flink系列之:使用flink cdc3从mysql数据库同步数据到doris和starrocks
  • QEMU源码全解析 —— 内存虚拟化(17)
  • 计算机网络-面试总结
  • 常用高压缩率的视频容器格式,并进行大比例压缩
  • Windows 上源码安装 FastGPT
  • S7-1200如何利用时钟存储器做震荡电路
  • QQ登录测试用例报告
  • 大模型SFT有监督微调教程
  • Java Web开发实战与项目——开发一个在线论坛系统
  • 在其他位置调用Static结构
  • 德国斯图加特发生车辆冲撞人群事件,至少三人受伤
  • 言短意长|今年五一假期的一个新变化
  • 人民日报评论员:因势利导对经济布局进行调整优化
  • 韩国检方结束对尹锡悦私宅的扣押搜查
  • 滨江集团:一季度营收225.07亿元,净利润9.75亿元
  • 准80后湖北省财政厅副厅长徐晶华已调任襄阳市副市长