已经知服务器地址和端口号如何设置客户端的ip和端口号,使得客户端连接上服务器,请写出C语言代码
时间: 2024-09-10 13:04:29 浏览: 43
在C语言中,客户端连接服务器通常使用`socket`编程。以下是一个简单的示例代码,展示了如何在已知服务器地址和端口号的情况下,设置客户端的IP地址和端口号,以便连接到服务器。这里假设客户端与服务器在同一台机器上运行,因此客户端的IP地址可以设置为本地回环地址("127.0.0.1"),端口号根据实际情况分配。
```c
#include <stdio.h> // 标准输入输出定义
#include <stdlib.h> // 标准函数库定义
#include <string.h> // 字符串处理
#include <unistd.h> // Unix 标准函数定义
#include <arpa/inet.h> // IP地址转换函数
#include <sys/socket.h> // 套接字接口函数
#define SERVER_IP "127.0.0.1" // 服务器IP地址,假设为本地回环
#define SERVER_PORT 12345 // 服务器端口号
#define CLIENT_PORT 54321 // 客户端自定义端口号
int main() {
int sockfd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_addr_len = sizeof(client_addr);
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("Socket create failed");
exit(EXIT_FAILURE);
}
// 客户端地址设置(可以设置为任意端口,只要该端口未被占用)
memset(&client_addr, 0, sizeof(client_addr));
client_addr.sin_family = AF_INET; // IPv4协议族
client_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 本地地址
client_addr.sin_port = htons(CLIENT_PORT); // 客户端端口
// 绑定客户端地址到套接字
if (bind(sockfd, (const struct sockaddr *)&client_addr, sizeof(client_addr)) < 0) {
perror("Bind failed");
close(sockfd);
exit(EXIT_FAILURE);
}
// 服务器地址设置
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET; // IPv4协议族
server_addr.sin_port = htons(SERVER_PORT); // 服务器端口
inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr); // 服务器IP地址
// 连接到服务器
if (connect(sockfd, (const struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("Connect failed");
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Connected to server successfully\n");
// ... 这里可以进行数据交换 ...
// 关闭套接字
close(sockfd);
return 0;
}
```
请注意,本代码示例仅用于说明目的,实际应用中可能需要根据具体情况进行错误处理和资源管理。
阅读全文