UDP通讯端代码1
#include "myhead.h"
int udpsock;
//线程的任务函数
void *mysendmsg(void *arg)
{
char rbuf[100];
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=inet_addr("192.168.22.9"); //对方的ip
addr.sin_port=htons(20000); //对方端口号
while(1)
{
bzero(rbuf,100);
printf("请输入要发送的信息!\n");
scanf("%s",rbuf);
sendto(udpsock,rbuf,strlen(rbuf),0,(struct sockaddr *)&addr,sizeof(addr));
}
}
int main(int argc,char **argv)
{
int ret;
char sbuf[100];
pthread_t id;
//定义ipv4地址体变量存放需要绑定的ip和端口号
struct sockaddr_in bindaddr;
bzero(&bindaddr,sizeof(bindaddr));
bindaddr.sin_family=AF_INET;
bindaddr.sin_addr.s_addr=htonl(INADDR_ANY); //自动匹配发送端的ip
bindaddr.sin_port=htons(30000); //发送端端口号
//定义ipv4地址体变量目标主机的ip和端口号
struct sockaddr_in otheraddr;
bzero(&otheraddr,sizeof(otheraddr));
int addrsize=sizeof(otheraddr);
//创建udp套接字
udpsock=socket(AF_INET,SOCK_DGRAM,0);
if(udpsock==-1)
{
perror("创建udp套接字失败!\n");
return -1;
}
//取消端口绑定的限制
int on=1;
setsockopt(udpsock,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
//绑定
ret=bind(udpsock,(struct sockaddr *)&bindaddr,sizeof(bindaddr));
if(ret==-1)
{
perror("绑定ip端口失败了!\n");
return -1;
}
//创建一个线程专门发送信息
pthread_create(&id,NULL,mysendmsg,NULL);
//接收信息
while(1)
{
bzero(sbuf,100);
recvfrom(udpsock,sbuf,100,0,(struct sockaddr *)&otheraddr,&addrsize);
printf("ip地址是:%s 端口号是:%hu 发送过来的信息是:%s\n",inet_ntoa(otheraddr.sin_addr),ntohs(otheraddr.sin_port),sbuf);
}
//关闭
close(udpsock);
return 0;
}
UDP通讯端代码2
#include "myhead.h"
int udpsock;
//线程的任务函数
void *myrecvmsg(void *arg)
{
char rbuf[100];
while(1)
{
bzero(rbuf,100);
recvfrom(udpsock,rbuf,100,0,NULL,NULL);
printf("我接收的信息是:%s\n",rbuf);
}
}
int main(int argc,char **argv)
{
int ret;
char sbuf[100];
pthread_t id;
//定义ipv4地址体变量存放需要绑定的ip和端口号
struct sockaddr_in bindaddr;
bzero(&bindaddr,sizeof(bindaddr));
bindaddr.sin_family=AF_INET;
bindaddr.sin_addr.s_addr=htonl(INADDR_ANY); //自动匹配发送端的ip
bindaddr.sin_port=htons(20000); //发送端端口号
//定义ipv4地址体变量目标主机的ip和端口号
struct sockaddr_in otheraddr;
bzero(&otheraddr,sizeof(otheraddr));
otheraddr.sin_family=AF_INET;
otheraddr.sin_addr.s_addr=inet_addr("192.168.22.9"); //目标主机的ip
otheraddr.sin_port=htons(30000); //目标主机的端口号
//创建udp套接字
udpsock=socket(AF_INET,SOCK_DGRAM,0);
if(udpsock==-1)
{
perror("创建udp套接字失败!\n");
return -1;
}
//取消端口绑定的限制
int on=1;
setsockopt(udpsock,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
//绑定
ret=bind(udpsock,(struct sockaddr *)&bindaddr,sizeof(bindaddr));
if(ret==-1)
{
perror("绑定ip端口失败了!\n");
return -1;
}
//创建一个线程专门接收信息
pthread_create(&id,NULL,myrecvmsg,NULL);
//发送信息给另外一个主机
while(1)
{
bzero(sbuf,100);
printf("请输入要发送的信息!\n");
scanf("%s",sbuf);
sendto(udpsock,sbuf,strlen(sbuf),0,(struct sockaddr *)&otheraddr,sizeof(otheraddr));
}
//关闭
close(udpsock);
return 0;
}