#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080 // 服务器端口号
#define SERVER_IP "127.0.0.1" // 服务器IP地址
#define BUFFER_SIZE 1024
int main(int argc, char const *argv[]) {
int sockfd;
struct sockaddr_in servaddr;
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
// 初始化服务器地址结构体
memset(&servaddr, 0, sizeof(servaddr));
memset(servaddr.sin_zero, '\0', sizeof servaddr.sin_zero);
// 设置地址族、端口号和IP地址
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = inet_addr(SERVER_IP);
// 连接到服务器
if (connect(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
perror("connect failed");
close(sockfd);
exit(EXIT_FAILURE);
}
char buffer[BUFFER_SIZE] = "Hello, Server!";
// 发送消息到服务器
send(sockfd, buffer, strlen(buffer), 0);
printf("Message sent to server: %s\n", buffer);
// 关闭套接字
close(sockfd);
return 0;
}
函数调用作用
- socket:创建一个套接字。
AF_INET
表示使用IPv4协议,SOCK_STREAM
表示使用TCP协议,最后一个参数 0
表示默认协议。成功时返回套接字描述符,失败返回 -1
。
- memset:用于初始化
servaddr
结构体,将其内存区域清零。
- inet_addr:将点分十进制的IP地址字符串转换为网络字节序的32位IP地址。
- connect:将套接字连接到服务器指定的地址和端口。成功返回
0
,失败返回 -1
。
- send:将数据发送到已连接的套接字。第一个参数是套接字描述符,第二个参数是要发送的数据,第三个参数是数据长度,最后一个参数是标志位,通常设为
0
。
- close:关闭套接字,释放相关资源。
网络编程相关结构体
- struct sockaddr_in:这是用于IPv4的套接字地址结构体。
- sin_family:地址族,通常设为
AF_INET
。
- sin_port:端口号,需要使用
htons
函数将主机字节序转换为网络字节序。
- sin_addr:IP地址,通过
inet_addr
函数转换为网络字节序。
- sin_zero:填充字段,通常设为
0
。