> 文章列表 > socket 编程实战(编写客户端程序 )

socket 编程实战(编写客户端程序 )

socket 编程实战(编写客户端程序 )

编写客户端程序

接着上一篇:实战服务端程序

接下来我们再编写一个简单地客户端应用程序,客户端的功能是连接上小节所实现的服务器,连接成功之后向服务器发送数据,发送的数据由用户输入。示例代码如下所示:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <arpa/inet.h> 
#include <netinet/in.h> #define SERVER_PORT 8888 //服务器的端口号 #define SERVER_IP "192.168.1.150" //服务器的 IP 地址 int main(void) { struct sockaddr_in server_addr = {0}; char buf[512]; int sockfd; int ret; /* 打开套接字,得到套接字描述符 */ sockfd = socket(AF_INET, SOCK_STREAM, 0); if (0 > sockfd) { perror("socket error"); exit(EXIT_FAILURE); } /* 调用 connect 连接远端服务器 */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); //端口号 inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr);//IP 地址 ret = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)); if (0 > ret) { perror("connect error"); close(sockfd); exit(EXIT_FAILURE); } printf("服务器连接成功...\\n\\n"); /* 向服务器发送数据 */ for ( ; ; ) { // 清理缓冲区 memset(buf, 0x0, sizeof(buf)); // 接收用户输入的字符串数据 printf("Please enter a string: "); fgets(buf, sizeof(buf), stdin); // 将用户输入的数据发送给服务器 ret = send(sockfd, buf, strlen(buf), 0); if(0 > ret){ perror("send error"); break; } //输入了"exit",退出循环 if(0 == strncmp(buf, "exit", 4)) break; } close(sockfd); exit(EXIT_SUCCESS); } 

代码不再说明!需要注意的是 SERVER_IP 和 SERVER_PORT 指的是服务器的 IP 地址和端口号,服务器的 IP 地址根据实际情况进行设置,服务器应用程序示例代码 30.4.1 中我们绑定的端口号为 8888,所以在客户端应用程序中我们也需要指定 SERVER_PORT 为 8888。

编译测试

这里笔者将服务器程序运行在开发板上,而将客户端应用程序运行在 Ubuntu 系统,当然你也可以将客户端和服务器程序都运行在开发板或 Ubuntu 系统,这都是没问题的。

首先编译服务器应用程序和客户端应用程序:
socket 编程实战(编写客户端程序 )
编译得到 client 和 server 可执行文件,server 可执行文件在开发板上运行,client 可执行文件在 PC 端Ubuntu 系统下运行。将 server 可执行文件拷贝到开发板/home/root 目录下,如下所示:
socket 编程实战(编写客户端程序 )
在开发板执行 server:
socket 编程实战(编写客户端程序 )
接着在 Ubuntu 系统执行客户端程序:
socket 编程实战(编写客户端程序 )
客户端运行之后将会去连接远端服务器,连接成功便会打印出信息“服务器连接成功…”,此时服务器也会监测到客户端连接,会打印相应的信息,如下所示:
socket 编程实战(编写客户端程序 )
接下来我们便可以在客户端处输入字符串,客户端程序会将我们输入的字符串信息发送给服务器,服务器接收到之后将其打印出来,如下所示:
socket 编程实战(编写客户端程序 )
服务器接收到客户端发送的信息:
socket 编程实战(编写客户端程序 )

总结

到此,本章的内容就结束了,内容讲得非常浅,目的其实并不是让大家学会网络编程,这个是不可能的,旨在以引导大家入门为主,让大家对 socket 网络编程有一个基本的了解和认识。因为网络编程本就是应用编程中一门比较专业的方向,如果大家将来想从事这方面的工作、或者以后从事了这方面工作,再去找资料好好学习,如果没有这个打算,那就不要去深入研究这个,有了基本的了解、认识就行了。