使用wireshark抓包:
sudo apt-get install wireshark
sudo wireshark
udp:无连接,(只要创建好了套接字绑定了地址信息之后就可以收发信息)
//服务器:
1.创建套接字
2.绑定地址信息
3.接收信息 recvfrom
4.关闭套接字
//客户端:
1.创建套接字
2.发送信息 sendto
3.关闭套接字
//服务器
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
//udp实现服务器和客户端通信
int main(int argc,char *argv[])
{
if(argc<2)
{
printf("please input\n");
return -1;
}
//1.创建套接字
int sockFd=-1;
sockFd=socket(AF_INET,SOCK_DGRAM,0);
if(sockFd<0)
{
perror("socket error\n");
return -1;
}
printf("socket ok\n");
//2.绑定地址信息
int ret;
struct sockaddr_in servAddr={0};
servAddr.sin_family=PF_INET;
servAddr.sin_port=htons(atoi(argv[1]));
servAddr.sin_addr.s_addr=inet_addr("0.0.0.0");
ret=bind(sockFd,(struct sockaddr *)&servAddr,sizeof(servAddr));
if(ret<0)
{
perror("bind error\n");
close(sockFd);
return -1;
}
printf("bind ok\n");
//客户端地址信息
struct sockaddr_in cliAddr={0};
socklen_t len=sizeof(cliAddr);
//3.接收信息
char buf[1000]={0};
ret=recvfrom(sockFd,buf,sizeof(buf),0,(struct sockaddr *)&cliAddr,&len);
if(ret<0)
{
perror("recvfrom error\n");
close(sockFd);
return -1;
}
printf("recvfrom ok,buf=%s\n",buf);
//4.关闭套接字
close(sockFd);
return 0;
}
//客户端
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
//客户端
int main(int argc,char *argv[])
{
if(argc<3)
{
printf("please input:\n");
return -1;
}
//1.创建套接字
int sockFd =-1;
sockFd=socket(AF_INET,SOCK_DGRAM,0);
if(sockFd<0)
{
printf("socket error\n");
return -1;
}
printf("socket ok\n");
//按照服务器的地址信息发送
struct sockaddr_in servAddr={0};
servAddr.sin_family=PF_INET;
servAddr.sin_port=htons(atoi(argv[2]));
servAddr.sin_addr.s_addr=inet_addr(argv[1]);
//2.发送信息
int ret;
char buf[1000]={0};
fgets(buf,sizeof(buf),stdin);
ret=sendto(sockFd,buf,sizeof(buf),0,(struct sockaddr *)&servAddr,sizeof(servAddr));
if(ret<0)
{
printf("sendto error\n");
close(sockFd);
return -1;
}
printf("sendto ok\n");
//3.关闭套接字
close(sockFd);
}