套接字(socket)是计算机网络编程中的一个核心概念,它是一种通信管道,用于在不同计算机之间实现数据交换。在C语言中,套接字通信通常使用BSD套接字库(也称为POSIX套接字)进行实现。
套接字的工作原理可以分为以下几个步骤:
以下是一个简单的TCP服务器示例:
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
int main(int argc, char *argv[]) {
int sockfd, newsockfd, portno, clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc < 2) {
fprintf(stderr, "Usage: %s <port>\n", argv[0]);
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket");
exit(1);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
perror("bind");
exit(1);
}
listen(sockfd, 5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0) {
perror("accept");
exit(1);
}
bzero(buffer, 256);
n = read(newsockfd, buffer, 255);
if (n < 0) {
perror("read");
exit(1);
}
printf("Received: %s\n", buffer);
n = write(newsockfd, "I got your message", 18);
if (n < 0) {
perror("write");
exit(1);
}
close(newsockfd);
close(sockfd);
return 0;
}
在这个示例中,我们创建了一个TCP套接字,绑定到指定的IP地址和端口号,并监听连接。当客户端连接时,我们接受连接并读取客户端发送的数据,然后发送一个响应。最后,我们关闭套接字。
总之,套接字是计算机网络编程中的一个重要概念,它提供了一种简单而有效的方式来实现网络通信。在C语言中,套接字通信通常使用BSD套接字库进行实现。
领取专属 10元无门槛券
手把手带您无忧上云