学习Linux网络编程基本函数
概述
学习 Linux 网络编程基本函数是使用 Linux 操作系统进行网络编程的前提和基础。在编写网络应用程序时,需要使用 Linux 网络编程基本函数来完成各种网络通信操作。本攻略将详细介绍 Linux 网络编程基本函数的使用方法。
网络编程基本函数
Linux 网络编程基本函数主要包括以下几个部分:
socket()
在 Linux 网络编程中,socket() 函数用于创建一个新的套接字并返回套接字描述符。套接字描述符是进程操作套接字的接口。下面是一个简单的示例:
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
参数说明:
- domain:协议类型
- type:套接字类型
- protocol:协议编号
bind()
bind() 函数用于将套接字描述符与一个 IP 地址和端口号关联。下面是一个简单的示例:
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
参数说明:
- sockfd:套接字描述符
- addr:IP 地址和端口号
- addrlen:IP 地址和端口号的长度
listen()
listen() 函数用于将套接字描述符设置为监听状态,等待客户端的连接请求。下面是一个简单的示例:
#include <sys/socket.h>
int listen(int sockfd, int backlog);
参数说明:
- sockfd:套接字描述符
- backlog:等待连接队列的最大长度
accept()
accept() 函数用于接受客户端的连接请求,并创建一个新的套接字描述符来处理该连接。下面是一个简单的示例:
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数说明:
- sockfd:套接字描述符
- addr:客户端的 IP 地址和端口号
- addrlen:客户端的 IP 地址和端口号的长度
示例
下面是一个简单的网络编程示例:在客户端和服务器端之间传递一个字符串。服务器端创建一个套接字并等待客户端的连接请求。客户端连接服务器,并向服务器发送一条消息。服务器接收到消息后将其打印出来。
服务器端代码(server.c):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 9000
int main() {
int sockfd, newsockfd;
socklen_t clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("Failed to create socket");
exit(EXIT_FAILURE);
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(PORT);
if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
perror("Failed to bind socket");
exit(EXIT_FAILURE);
}
listen(sockfd, 5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);
if (newsockfd < 0) {
perror("Failed to accept connection");
exit(EXIT_FAILURE);
}
memset(buffer, 0, sizeof(buffer));
n = read(newsockfd, buffer, sizeof(buffer));
if (n < 0) {
perror("Failed to read from socket");
exit(EXIT_FAILURE);
}
printf("Message received: %s\n", buffer);
close(sockfd);
close(newsockfd);
return 0;
}
客户端代码(client.c):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 9000
int main() {
int sockfd;
struct sockaddr_in serv_addr;
char buffer[256] = "Hello, server!";
int n;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("Failed to create socket");
exit(EXIT_FAILURE);
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
perror("Invalid address/ Address not supported");
exit(EXIT_FAILURE);
}
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
perror("Failed to connect to server");
exit(EXIT_FAILURE);
}
n = write(sockfd, buffer, strlen(buffer));
if (n < 0) {
perror("Failed to write to socket");
exit(EXIT_FAILURE);
}
close(sockfd);
return 0;
}
编译并执行结果:
$ gcc -o server server.c
$ ./server
# 在另一个终端窗口中
$ gcc -o client client.c
$ ./client
结果:
# 服务器端输出
$ ./server
Message received: Hello, server!
以上就是一个简单的 TCP 网络编程示例。通过该示例,我们可以了解到 Linux 网络编程基本函数的使用方法及其原理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:学习Linux网络编程基本函数 - Python技术站