利用上述步骤,本节我们实现一个客户端,如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h> // sockaddr_in
#include <sys/socket.h>
int main()
{
const char *server_ip = "127.0.0.1";
int server_port = 0x1234;
int client_socket;
client_socket = socket(PF_INET, SOCK_STREAM, 0);
if (client_socket == -1) {
perror("socket create error");
exit(1);
}
printf("client_socket is %d\n", client_socket);
struct sockaddr_in server_addr; // server address
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(server_port);
server_addr.sin_addr.s_addr = inet_addr(server_ip);
if (connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
perror("connect error");
exit(1);
}
printf("connect ok\n");
char recv_message[100];
int length = recv(client_socket, recv_message, 100, 0);
recv_message[length] = '\0';
printf("Receive form server: %s\n", recv_message);
close(client_socket);
return 0;
}
第13行调用调用socket函数创建客户端的套接字(相当于安装电话机)。
第20~24行初始化服务端地址。
第26行调用connect函数连接服务端。
第32~35行利用recv函数接受服务端发来的数据,并打印。
第37行关闭socket。
右侧打开名为client_time的c文件,试编写个时间获取客户端,并测试与服务端的通信。
如下图所示:
提示:ls执行后,发现当下目录有一个nohup.out文件,这是在使用nohup命令提交作业后,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。
运行客户端后,可以获取到服务端的当前时间。
