服务端:server.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 12000
#define IP "192.168.48.130"
typedef struct SERVER_INFO
{
int building;
int uint;
int room;
unsigned int IPaddr;
}INFO;
//初始化socket
void my_server(void)
{
int socketfd = -1;
int count = 0;
struct sockaddr_in serveraddr;
struct sockaddr_in clientaddr;
char buf[100];
//第一步,socket得到一个UDP的fd
if((socketfd=socket(AF_INET,SOCK_DGRAM,0))<0)
{
perror("socket");
}
//设置IP地址
int len=sizeof(clientaddr);
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET; //IP地址类型为IPv4
serveraddr.sin_port=htons(PORT); //端口号
serveraddr.sin_addr.s_addr=inet_addr(IP);//绑定IP
//第二步,bind服务器的IP
if((bind(socketfd,(const struct sockaddr *)&serveraddr,sizeof(serveraddr)))<0)
{
perror("bind");
}
else
{
printf("bind had success!\n");
}
//第三步,信息的接收与发送
//接收来自服务器的信息
count=recvfrom(socketfd,buf,sizeof(buf),0,(struct sockaddr *)&clientaddr,&len);
if(count<0)
perror("recvfrom");
else
{
printf("server had recver %d byte\n",count);
printf("server had recver %s byte\n",buf);
}
memset(buf,0,sizeof(buf));
//发送信息给客户端
//要发送的结构体信息
int Buf[20];
INFO fenji;
Buf[0]=fenji.building=1010;
Buf[1]=fenji.uint=1;
Buf[2]=fenji.room=15;
Buf[3]=fenji.IPaddr=1921681180;
sendto(socketfd,Buf,sizeof(fenji),0,(const struct sockaddr *)&clientaddr,len);
printf("had send struct fenji \n");
close(socketfd);
return;
}
int main(void)
{
my_server();
return 0;
}
服务端:client.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 12000
#define IP "192.168.48.130"
char buf[]="hello server!";
void my_client(void)
{
int socketfd = -1;
int len=0;
int count=0;
struct sockaddr_in connectaddr;
//第一步,socket得到一个UDP的fd
if((socketfd=socket(AF_INET,SOCK_DGRAM,0))<0)
{
perror("socket");
}
//设置IP地址(IP为要连接的服务器地址)
bzero(&connectaddr,sizeof(connectaddr));
connectaddr.sin_family=AF_INET;
connectaddr.sin_port=htons(PORT);
connectaddr.sin_addr.s_addr=inet_addr(IP);
len=sizeof(connectaddr);
/* UDP不需要connect
//第二步,连接connect
if(connect(socketfd,(const struct sockaddr *)&connectaddr,len)<0)
{
perror("connect");
}
else
{
printf("connect is success!\n");
}
*/
printf("buf=%s\n",buf);
//客户端向服务端发送
sendto(socketfd,buf,sizeof(buf),0,(const struct sockaddr *)&connectaddr,len);
printf("buf=%s\n",buf);
memset(buf,0,sizeof(buf));
//服务端接收客户端的信息
int Buf[20];
count=recvfrom(socketfd,Buf,sizeof(buf),0,(struct sockaddr *)&connectaddr,&len);
printf("recive from server Buf[0]=%d\n",Buf[0]);
printf("recive from server Buf[1]=%d\n",Buf[1]);
printf("recive from server Buf[2]=%d\n",Buf[2]);
printf("recive from server Buf[3]=%d\n",Buf[3]);
close(socketfd);
return;
}
int main(void)
{
my_client();
return 0;
}