如何利用Linux Sock實(shí)現(xiàn)數(shù)據(jù)傳輸

小樊
82
2024-09-05 23:59:15

在 Linux 中,使用 Socket 進(jìn)行數(shù)據(jù)傳輸是一種常見(jiàn)的網(wǎng)絡(luò)編程方法

  1. 包含頭文件:
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include<string.h>
#include<stdio.h>
#include <stdlib.h>
  1. 創(chuàng)建 Socket:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
    perror("socket");
    exit(1);
}
  1. 配置服務(wù)器地址和端口:
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT); // 將端口號(hào)轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 將 IP 地址轉(zhuǎn)換為二進(jìn)制格式
  1. 連接服務(wù)器:
if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
    perror("connect");
    exit(1);
}
  1. 發(fā)送和接收數(shù)據(jù):
char send_buf[1024] = "Hello, Server!";
send(sockfd, send_buf, strlen(send_buf), 0);

char recv_buf[1024];
recv(sockfd, recv_buf, sizeof(recv_buf), 0);
printf("Received from server: %s\n", recv_buf);
  1. 關(guān)閉 Socket:
close(sockfd);

以上代碼示例展示了如何在客戶端使用 Socket 連接到服務(wù)器并發(fā)送接收數(shù)據(jù)。在服務(wù)器端,你需要?jiǎng)?chuàng)建一個(gè) Socket,綁定到指定的地址和端口,然后監(jiān)聽(tīng)連接請(qǐng)求。當(dāng)客戶端連接時(shí),服務(wù)器會(huì)接受連接并創(chuàng)建一個(gè)新的 Socket 與客戶端進(jìn)行通信。服務(wù)器端的代碼與客戶端類似,但需要添加綁定和監(jiān)聽(tīng)的步驟。

注意:這里的代碼示例僅用于演示目的,實(shí)際應(yīng)用中可能需要根據(jù)需求進(jìn)行調(diào)整和優(yōu)化。同時(shí),為了簡(jiǎn)化示例,錯(cuò)誤處理和資源釋放等操作相對(duì)簡(jiǎn)單,實(shí)際應(yīng)用中需要更完善的錯(cuò)誤處理機(jī)制。

0