1.客户端的程序client.c如下:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<arpa/inet.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include<signal.h>
#include<netdb.h>
#include <sys/time.h>
#include <math.h>
#define SERVPORT 2000
#define MAXDATASIZE 10000
main(int argc,char *argv[])
{
long int sockfd,recvbytes;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
if(argc<2)
{
fprintf(stderr,"please enter the server hostname!/n");
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL)
{
perror("gethostbyname error!");
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket creat failed!");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
serv_addr.sin_addr=*((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(struct sockaddr))==-1)
{
perror("connect error!");
exit(1);
}
if((recvbytes=recv(sockfd,buf,MAXDATASIZE,0))==-1)
{
perror("recv error!");
exit(1);
}
buf[recvbytes]='/0';
printf("Received: %s/n",buf);
close(sockfd);
}
2.服务器端的程序server.c 如下:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<arpa/inet.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include<signal.h>
#define SERVPORT 2000
#define BACKLOG 10
#include <sys/time.h>
#include <math.h>
int main()
{
int sockfd,client_fd;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
socklen_t sin_size;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket creat failed!");
exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind error!");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen error!");
exit(1);
}
while(1)
{
sin_size=sizeof(struct sockaddr_in);
client_fd=accept(sockfd,(struct sockaddr *)&remote_addr,&sin_size);
if(!fork())
{
char *msg="Hello,you are connected!";
int len,bytesent;
len=strlen(msg);
bytesent=send(client_fd,msg,len,0);
if(bytesent==-1)
{
perror("send error!");
shutdown(client_fd,2);
exit(0);
}
else
{
printf("Send message %s/nByte %d/n",msg,bytesent);
}
}
}
shutdown(client_fd,2);
}
3.交叉编译server.c :arm-linux-gcc -o server server.c
把生成的server放到开发板上.
本地编译client.c :gcc -o client client.c
4.在开发板上运行server : ./server
在主机上运行client : ./cilent 192.168.0.171
后面的ip为板子的ip,要换成自己的板子的ip.
注意事项:板子上的网络必须是通的,即可以ping通.
linux下最简单的socket编程(1)----基于tcp的
最新推荐文章于 2025-08-08 20:58:41 发布