首先可能需要大家看一些预备知识(包括一些要用到的接口);当然也可以不看,当我的建议是最好呢看一下
https://blog.csdn.net/a15929748502/article/details/80400341首先认识UDP协议
此处我们先对UDP有 个直观的认识后 ,我们再详细讨论
传输层协议
无连接
不可靠传输
面向数据报
其次我们要知道服务器和客户端是怎么运行起来的
服务器
1创建socket
2绑定端口
3循环的读取数据
4针对读取到的数据进行计算和处理
5把处理后的结果发回客户端
客户端
1创建socket文件
2给服务器发送请求
3从服务器中读取结果。
理解之后只需要把文字翻译成代码就好了,以下是我翻译的代码
服务器
[root@localhost UCP]# vim server.c
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
int main(int argc ,char**argv)
{
int sock=socket(AF_INET,SOCK_DGRAM,0);//创建socket
struct sockaddr_in local;
if (sock<0){
perror("socket");
return 1;
}
local.sin_family=AF_INET;
local.sin_port=htons(atoi(argv[2]));
local.sin_addr.s_addr= inet_addr(argv[1]);
if( bind (sock ,(struct sockaddr*)&local,sizeof(local))<0)//和端口进行连接
{
perror("bind");
return 1;
}
char buf[1024];
struct sockaddr_in client ;
while(1)//循环接受并发送
{
socklen_t len=sizeof (client);
ssize_t s=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client,&len);
if (s>0){
buf[s]=0;
printf ("[%s:%d];%s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf);
sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&client,len);
}
}
return 0;
}
"server.c" 50L, 843C
客户端
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
int main(int argc ,char**argv)
{
int sock=socket(AF_INET,SOCK_DGRAM,0);//创建socket文件
struct sockaddr_in server;
if (sock<0){
perror("socket");
return 1;
}
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[2]));
server.sin_addr.s_addr= inet_addr(argv[1]);
char buf[1024];
struct sockaddr_in peer ;
while(1)
{
socklen_t len=sizeof (peer);
printf ("please enter#”);
fflush(stdout);
ssize_t s=read(0,buf,sizeof(buf)-1);
if (s>0){
buf[s-1]=0;
sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&server,len);
ssize_t _s=recvfrom(sock,buf,strlen(buf),0,(struct sockaddr*)&peer,&len);
if(_s>0)
buf[_s]=0;
printf ("server echo# %s\n",buf);
}
}
return 0;
}
//注意客户端不用绑定端口,由操作系统分配。//服务器端1025-65535端口号可以自己指定,但1-1025预留给操作系统