实验4-3:UDP客户端服务器
实验目的:
熟悉UDP客户端服务器编程
实验要求:
1、实现UDP客户端服务器回显程序
2、传输信息要求如下
(1)尝试用C语言结构去发送或接收一个信息包
(2)将服务器运行于开发板,客服端运行于ubuntu 12.04,抓包分析UDP协议
实验步骤:
服务端的程序:
#include
#include
#include
#include
#include
#include
#include
#include
#define PORT 1234
#define BACKLOG 1
int main()
{
int listenfd, connectfd;
struct sockaddr_in server;
struct sockaddr_in client;
socklen_t addrlen;
if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror('Creating socket failed.');
exit(1);
}
int opt =SO_REUSEADDR;
setsockopt(listenfd,SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr= htonl (INADDR_ANY);
if(bind(listenfd, (struct sockaddr *)&server, sizeof(server)) == -1) {
perror('Binderror.');
exit(1);
}
if(listen(listenfd,BACKLOG)== -1){ /* calls listen() */
perror('listen()errorn');
exit(1);
}
addrlen =sizeof(client);
if((connectfd = accept(listenfd,(struct sockaddr*)&client,&addrlen))==-1) {
perror('accept()errorn');
exit(1);
}
printf('Yougot a connection from cient's ip is %s, prot is %dn',inet_ntoa(client.sin_addr),htons(client.sin_port));
send(connectfd,'Welcometo my server.n',22,0);
close(connectfd);
close(listenfd);
return 0;
}
2、在客户端传送信息,并接收回显结果
#include #include #include #include #include #include #include #include #define PORT 1234 #define MAXDATASIZE 100 int main(int argc, char *argv[]) { int sockfd, num; char buf[MAXDATASIZE]; struct hostent *he; struct sockaddr_in server; if (argc!=2) { printf('Usage:%s exit(1); } if((he=gethostbyname(argv[1]))==NULL){ printf('gethostbyname()errorn'); exit(1); } if((sockfd=socket(AF_INET, SOCK_STREAM, 0))==-1){ printf('socket()errorn'); exit(1); } bzero(&server,sizeof(server)); server.sin_family= AF_INET; server.sin_port = htons(PORT); server.sin_addr =*((struct in_addr *)he->h_addr); if(connect(sockfd,(struct sockaddr *)&server,sizeof(server))==-1){ printf('connect()errorn'); exit(1); } if((num=recv(sockfd,buf,MAXDATASIZE,0)) == -1){ printf('recv() errorn'); exit(1); } buf[num-1]='