当前位置:首页 > 行业动态 > 正文

c 网络编程实例教程

网络编程实例教程能帮助初学者掌握 网络编程基础,通过实际案例理解网络通信原理、协议及编程方法,提升开发网络应用能力。

一、创建套接字

1、套接字类型:主要有两种类型,流套接字(SOCK_STREAM)用于TCP连接,数据报套接字(SOCK_DGRAM)用于UDP连接。

2、创建函数:在C语言中,使用socket()函数创建套接字,其原型为int socket(int domain, int type, int protocol);,创建一个IPv4的流套接字可以使用socket(AF_INET, SOCK_STREAM, 0);

3、示例代码

int sockfd;

sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd < 0) { perror("Error opening socket"); exit(1); }

二、绑定地址

1、bind()函数:用于将套接字与特定的IP地址和端口号绑定在一起,其原型为int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

2、sockaddr_in结构:对于IPv4,使用sockaddr_in结构来指定地址和端口,该结构包含以下成员:sin_family(地址族,通常为AF_INET)、sin_port(端口号,需要使用htons()函数转换为网络字节序)、sin_addr(IP地址,使用INADDR_ANY表示任意本地地址或使用inet_addr()函数设置具体IP地址)。

3、示例代码

struct sockaddr_in serv_addr;

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = INADDR_ANY;

serv_addr.sin_port = htons(8080);

if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { perror("Error on binding"); exit(1); }

三、监听和接受连接

1、listen()函数:将套接字设置为监听模式,准备接受客户端的连接请求,其原型为int listen(int sockfd, int backlog);,其中backlog参数指定等待连接队列的最大长度。

2、accept()函数:用于接受连接请求,其原型为int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);,当有客户端连接时,accept()函数会返回一个新的套接字描述符,用于与该客户端进行通信。

3、示例代码

listen(sockfd, 5);

struct sockaddr_in cli_addr;

socklen_t clilen = sizeof(cli_addr);

int newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

if (newsockfd < 0) { perror("Error on accept"); exit(1); }

四、发送和接收数据

1、send()函数:用于向已连接的客户端发送数据,其原型为ssize_t send(int sockfd, const void *buf, size_t len, int flags);,其中buf是要发送的数据缓冲区,len是要发送的数据长度,flags通常设为0。

2、recv()函数:用于从已连接的客户端接收数据,其原型为ssize_t recv(int sockfd, void *buf, size_t len, int flags);,其中buf是存储接收数据的缓冲区,len是缓冲区长度,flags通常设为0。

3、示例代码

char buffer[256];

bzero(buffer, 256);

int n = recv(newsockfd, buffer, 255, 0);

if (n < 0) { perror("Error reading from socket"); exit(1); }

`printf("Here is the message: %s

", buffer);`

n = send(newsockfd, "I got your message", 18, 0);

if (n < 0) { perror("Error writing to socket"); exit(1); }

五、关闭套接字

1、close()函数:用于关闭套接字,释放资源,其原型为int close(int sockfd);

2、示例代码

close(newsockfd);

close(sockfd);

通过以上步骤和示例代码,可以初步掌握C语言网络编程的基本流程和方法,在实际开发中,还需要根据具体需求进行进一步的优化和完善,例如处理并发连接、实现协议解析等。

0