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

c 连接网络连接

要连接网络,请确保您的设备已开启Wi-Fi或移动数据,然后选择可用的网络并输入密码(如有)即可。

基于TCP的网络连接

客户端

c 连接网络连接

步骤 描述 示例代码
创建套接字 使用socket函数创建一个套接字描述符,指定地址族(如AF_INET表示IPv4)、套接字类型(SOCK_STREAM表示流式套接字,适用于TCP)和协议(通常为0,表示默认协议)。 int sockfd = socket(AF_INET, SOCK_STREAM, 0);
设置服务器地址 定义一个struct sockaddr_in结构体来存储服务器的地址信息,包括服务器的IP地址和端口号,需要将IP地址从字符串形式转换为二进制形式(使用inet_pton函数),并设置端口号(注意网络字节序转换,使用htons函数)。 struct sockaddr_in server_addr;
inet_pton(AF_INET, "192.168.1.100", &server_addr.sin_addr);
server_addr.sin_port = htons(8080);
连接服务器 使用connect函数向服务器发起连接请求,传入套接字描述符和服务器地址结构体,如果连接成功,返回0;否则返回 -1。 if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) perror("Connect failed");
exit(EXIT_FAILURE);
}
数据发送与接收 连接成功后,可以使用sendrecv函数进行数据的发送和接收,发送数据可以使用send(sockfd, buffer, strlen(buffer), 0);,接收数据可以使用recv(sockfd, buffer, sizeof(buffer), 0);

服务器端

c 连接网络连接

步骤 描述 示例代码
创建套接字 同客户端的创建套接字步骤,创建一个用于监听的套接字。 int listenfd = socket(AF_INET, SOCK_STREAM, 0);
绑定地址 定义一个struct sockaddr_in结构体来设置服务器的本地地址和端口号,然后使用bind函数将套接字与该地址绑定。 struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(8080);
bind(listenfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
开始监听 使用listen函数使套接字进入被动打开状态,准备接受客户端的连接请求,指定监听的套接字描述符和最大挂起连接数(一般为5)。 listen(listenfd, 5);
接受连接 当有客户端连接请求时,使用accept函数接受连接,返回一个新的套接字描述符用于与该客户端进行通信。 int connfd = accept(listenfd, (struct sockaddr *)NULL, NULL);
数据交互 与客户端类似,使用sendrecv函数进行数据的发送和接收。

基于UDP的网络连接

客户端

步骤 描述 示例代码
创建套接字 使用socket函数创建一个套接字描述符,地址族为AF_INET,套接字类型为SOCK_DGRAM(表示数据报套接字,适用于UDP)。 int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
设置服务器地址 同TCP客户端的设置服务器地址步骤,定义服务器的IP地址和端口号。 struct sockaddr_in server_addr;
inet_pton(AF_INET, "192.168.1.100", &server_addr.sin_addr);
server_addr.sin_port = htons(8080);
发送数据 使用sendto函数向服务器发送数据,需要传入套接字描述符、要发送的数据、数据长度、服务器地址结构体和地址长度。 char *message = "Hello, UDP Server!";
sendto(sockfd, message, strlen(message), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));
接收数据 使用recvfrom函数接收服务器发送的数据,同时可以获取发送方的地址信息。 `char buffer[1024];
int n = recvfrom(sockfd, buffer, sizeof(buffer), 0, NULL, NULL);
buffer[n] = ‘