TA的每日心情 | 擦汗 2024-9-30 02:33 |
---|
签到天数: 444 天 连续签到: 1 天 [LV.9]以坛为家II
|
本帖最后由 木子鱼 于 2014-6-7 19:23 编辑
继上一帖子是java语言版的socket网络编程实验,现在推出C语言版的。代码是有参考其他文献的,如有雷同,纯属巧合!
想法是将Rio的Ubuntu系统搭建成一个服务器 server端,在上面运行服务器端的c程序。
电脑ubuntu 作为 client 端,运行客户端的c程序。
````````````````````````````````````````````````````````````````````````````````````````````````````
步骤:1、服务器端程序的编写 service.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/time.h>
void main()
{
pid_t fd;
int listensock,connsock;
char recvbuff[100]; //定义要接收的数据缓冲区
struct sockaddr_in serveraddr; //定义网络套接字地址结构
listensock = socket(AF_INET,SOCK_STREAM,0); //创建一个套接字,用于监听
bzero(&serveraddr,sizeof(struct sockaddr)); //地址结构清零
serveraddr.sin_family = AF_INET; //指定使用的通讯协议族
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //指定接受任何连接
serveraddr.sin_port = htons(5000); //指定监听的端口
bind(listensock,(struct sockaddr *)&serveraddr,sizeof(struct sockaddr_in));//给套接口邦定地址
listen(listensock,1024); //开始监听
connsock = accept(listensock,(struct sockaddr *)NULL, NULL);
//建立通讯的套接字,accept函数,等待客户端程序使用connect函数的连接
recv(connsock,recvbuff,sizeof(recvbuff),0); //接收服务器的数据
printf("%s\n",recvbuff); //打印接收到的数据
sleep(2);
close(connsock); //关闭通讯套接字
close(listensock); //关闭监听套接字
}
```````````````````````````````````````````````````````````````````````````````````````````````````
客户端程序的编写 client.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/time.h>
int main(int argc,char **argv)
{
pid_t fd;
const char buff[] = "Hello! Welcome here\r\n"; //定义要发送的数据缓冲区;
int sockfd,connsock; //定义一个socket套接字,用于通讯
struct sockaddr_in serveraddr;//定义网络套接字地址结构
if(argc!= 2)
{
printf("Usage: echo ip地址");
exit(0);
}
sockfd =socket(AF_INET,SOCK_STREAM,0); //创建一个套接字
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET; //指定使用的通讯协议族
serveraddr.sin_port = htons(5000);//指定要连接的服务器的端口
inet_pton(AF_INET, argv[1], &serveraddr.sin_addr);
connect(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); //连接服务器
send(sockfd,buff,sizeof(buff), 0);//向客户端发送数据
close(sockfd); //关闭套接字
return(0);
}
```````````````````````````````````````````````````````````````````````````````````````````````````
步骤:2、程序的编译
service.c 是将运行在RIO板子上的,因此需要使用交叉编译工具,这里我就使用官网提供的交叉编译工具。
在电脑Ubuntu终端中,运行指令 $arm-linux-gcc -o service-RIO service.c
编译后成功得到 service-RIO 这个可执行文件。
然后用$scp /home/smartwang/service-RIO linaro@192.168.1.122:~ 指令将这个可执行文件传递到RIO板子系统上
运行时输入指令 ./service-RIO
client.c 是将运行在电脑Ubuntu上的,编译输入指令:$gcc client.c -o client-PC 编译后成功得到 client-PC 这个可执行文件。 运行时输入指令 ./client-PC 192.168.1.122 //此处IP 为服务器端IP地址
3、运行
首先运行服务器端程序,然后运行客户端程序,会看到服务器端有显示信息。
|
|