您的位置:首页 > 教育 > 培训 > 建站系统源码下载_正规网站建设费用_微信拓客的最新方法_网络营销的三大核心

建站系统源码下载_正规网站建设费用_微信拓客的最新方法_网络营销的三大核心

2025/9/24 7:05:41 来源:https://blog.csdn.net/qq_64047342/article/details/144494925  浏览:    关键词:建站系统源码下载_正规网站建设费用_微信拓客的最新方法_网络营销的三大核心
建站系统源码下载_正规网站建设费用_微信拓客的最新方法_网络营销的三大核心

Linux环境下C语言网络编程-Socket

一、前言

在网络编程中,Socket编程是非常重要的,它允许在不同主机或者不同进程之间进行通信。当我们的项目需要接入远程操作时,离不开Socket的应用。本文将记录一下我的学习Socket的心得记录。

二、Socket编程的基本概念

Socket,别名套接字,是计算机网络通信的基本单元。它可以看作是两个网络程序进行通信时,各自通信连接中的端点。其编程主要涉及以下几个步骤:

  1. **创建Socket:**使用socket()函数创建一个Socket。
  2. **绑定(Bind):**使用bind函数将Socket绑定到一个本地地址和端口
  3. 监听(Listen):使用listen()函数使Socket进入监听状态,等待客户端的连接请求。
  4. 接受连接(Accept):使用accept()函数接受客户端的连接请求,并返回一个新的Socket用于与该客户端通信。
  5. 连接(Connect):使用connect()函数连接到服务器。
  6. 发送和接收数据:使用send()/write()recv()/read()函数发送和接收数据。
  7. 关闭Socket:使用close()函数关闭Socket。

在这里插入图片描述

三、C语言Socket编程实现

1、服务器端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>int main() {int server_fd, new_socket;struct sockaddr_in address;int addrlen = sizeof(address);char buffer[1024] = {0};const char *hello = "Hello from server";// 创建Socketserver_fd = socket(AF_INET, SOCK_STREAM, 0);if (server_fd == -1) {perror("socket failed");exit(EXIT_FAILURE);}address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY; // 监听所有ipaddress.sin_port = htons(8989);// 绑定if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {perror("bind failed");exit(EXIT_FAILURE);}// 监听if (listen(server_fd, 3) < 0) {perror("listen");exit(EXIT_FAILURE);}// 接受连接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {perror("accept");exit(EXIT_FAILURE);}// 发送数据send(new_socket, hello, strlen(hello), 0);// 关闭Socketclose(new_socket);close(server_fd);return 0;
}

2、客户端

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <unistd.h>  
#include <arpa/inet.h>  int main(int argc, char *argv[]) {  int sockfd;  struct sockaddr_in server_addr;  char buffer[1024] = {0};  char *message = "Hello, server!";  if (argc < 3) {  fprintf(stderr, "Usage: %s <server_ip> <server_port>\n", argv[0]);  exit(EXIT_FAILURE);  }  // 创建Socket  sockfd = socket(AF_INET, SOCK_STREAM, 0);  if (sockfd == -1) {  perror("socket creation failed");  exit(EXIT_FAILURE);  }  // 设置服务器地址信息  memset(&server_addr, 0, sizeof(server_addr));  server_addr.sin_family = AF_INET;  server_addr.sin_port = htons(atoi(argv[2])); // 转换为网络字节序  // 将IP地址从点分十进制转换为32位整数  if (inet_pton(AF_INET, argv[1], &server_addr.sin_addr) <= 0) {  fprintf(stderr, "Invalid address/ Address not supported\n");  exit(EXIT_FAILURE);  }  // 连接到服务器  if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {  perror("connection failed");  exit(EXIT_FAILURE);  }  // 发送数据  if (send(sockfd, message, strlen(message), 0) < 0) {  puts("send failed");  }  // 接收数据  if (recv(sockfd, buffer, sizeof(buffer)-1, 0) < 0) {  puts("recv failed");  } else {  puts("Message from server: ");  puts(buffer);  }  // 关闭Socket  close(sockfd);  return 0;  
}

在这个示例中,客户端程序从命令行参数中接收服务器的IP地址和端口号。它首先创建一个Socket,然后连接到服务器,发送一条消息,并等待服务器的响应。一旦接收到服务器的响应,客户端就打印出消息并关闭Socket。如果Socket创建、连接或数据传输失败,程序将打印出错误信息并退出。

四、总结

端程序从命令行参数中接收服务器的IP地址和端口号。它首先创建一个Socket,然后连接到服务器,发送一条消息,并等待服务器的响应。一旦接收到服务器的响应,客户端就打印出消息并关闭Socket。如果Socket创建、连接或数据传输失败,程序将打印出错误信息并退出。

四、总结

Socket编程是一种强大的网络编程技术,可以实现计算机之间的通信。在进行Socket编程时,需要掌握其基本概念、主要步骤、主要类型以及注意事项等方面的知识。同时,还需要根据具体的应用场景和需求进行相应的调整和优化。当然在实际的网络编程中,可能需要处理更复杂的情况,例如数据分段、非阻塞套接字、超时等。这些都需要额外的代码和逻辑来处理。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com