摘要
在传输层中,主要有两种通讯方式:TCP(传输控制协议)和UDP(用户数据报协议)方式。本次主要总结UDP方式的网络编程
UDP网络编程示意总图
程序算法
UDP代码实现服务端
#include<stdio.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdlib.h>
#define BUFSIZE 20
int main(int argc, const char *argv[])
{
int sfd;
sfd=socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in myaddr;
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(8888);
myaddr.sin_addr.s_addr = inet_addr("192.168.9.10");
bind(sfd,(struct sockaddr*)&myaddr,sizeof(myaddr));
struct sockaddr_in caddr;
char buf[BUFSIZE];
socklen_t len = sizeof(caddr);
char ipv4_addr[16];
char buffer[]={"stop"};
while(1)
{
if(recvfrom(sfd,buf,BUFSIZE-1,0,(struct sockaddr*)&caddr,&len)<0)
{
perror("recvfrom");
continue;
}
if(inet_ntop(AF_INET,(struct sockaddr*)&caddr,ipv4_addr,sizeof(caddr))<0)
{
perror("inet_ntop");
exit(0);
}
printf("client is connect,addr is %s,data is %s\n",ipv4_addr,buf);
if(strcmp(buf,buffer) == 0)
{
printf("client is quit,sfd is %d\n",sfd);
}
}
close(sfd);
return 0;
}
客户端
#include<stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <stdlib.h>
#define BUFSIZE 20
int main(int argc, const char *argv[])
{
int sfd;
sfd=socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in caddr;
caddr.sin_family=AF_INET;
caddr.sin_port = htons(8888);
caddr.sin_addr.s_addr = inet_addr("192.168.9.10");
char buf[BUFSIZE];
char buffer[]={"stop"};
while(1)
{
memset(buf,0,BUFSIZE);
printf("please input data:\n");
scanf("%s",buf);
getchar();
if(sendto(sfd, buf,BUFSIZE-1,0,(struct sockaddr*)&caddr , sizeof(caddr))<0)
{
perror("sendto");
exit(0);
}
if(!strcasecmp(buf,buffer))
{
printf("Clinet is quit,sfd is %d\n",sfd);
break;
}
}
close(sfd);
return 0;
}