您的位置:首页 > 其它

connect()在UDP连接中的应用一例

2013-03-16 16:55 393 查看
服务器:


[code]#include<stdio.h>
#include<sys/socket.h>

#include<netinet/in.h>

#include<arpa/inet.h>

#include<string.h>

#include<strings.h>

#include<stdlib.h>

#defineN256

typedefstructsockaddrSA;

intmain(intargc,char*argv[])

{
intsockfd;
structsockaddr_inmy_addr,peer_addr;
socklen_tpeerlen=sizeof(peer_addr);
charbuffer
;
if((sockfd=socket(PF_INET,SOCK_DGRAM,0))<0)
{
perror("failtosocket");
exit(-1);
}
my_addr.sin_family=PF_INET;
my_addr.sin_port=htons(atoi(argv[2]));
my_addr.sin_addr.s_addr=inet_addr(argv[1]);
if(bind(sockfd,(SA*)&my_addr,sizeof(my_addr))<0)
{
perror("failtobind");
exit(-1);
}
while(1)
{
recvfrom(sockfd,buffer,N,0,(SA*)&peer_addr,&peerlen);
printf("client:[%s:%d],%s",inet_ntoa(peer_addr.sin_addr),ntohs(peer_addr.sin_port),buffer);
sendto(sockfd,buffer,N,0,(SA*)&peer_addr,sizeof(peer_addr));
bzero(buffer,N);
}
return0;

}

[/code]

客户端:


#include<stdio.h>

[code]#include<sys/socket.h>
#include<netinet/in.h>

#include<arpa/inet.h>

#include<string.h>

#include<strings.h>

#include<stdlib.h>

#include<unistd.h>

#defineN256

typedefstructsockaddrSA;

intmain(void)

{
intsockfd;
structsockaddr_inmy_addr;
charbuffer
;
if((sockfd=socket(PF_INET,SOCK_DGRAM,0))<0)
{
perror("failtosocket");
exit(-1);
}
while(1)
{
bzero(buffer,N);
printf("exit?Y/N");
fgets(buffer,N,stdin);
if(strncmp(buffer,"Y",1)==0)
{
break;
}
else
{
bzero(&my_addr,sizeof(my_addr));
my_addr.sin_family=PF_INET;
printf("pleaseinputserver'sip>");
fgets(buffer,N,stdin);
buffer[strlen(buffer)-1]='\0';
my_addr.sin_addr.s_addr=inet_addr(buffer);
printf("pleaseinputserver'sport>");
fgets(buffer,N,stdin);
buffer[strlen(buffer)-1]='\0';
my_addr.sin_port=htons(atoi(buffer));
connect(sockfd,(SA*)&my_addr,sizeof(my_addr));
while(1)
{
fgets(buffer,N,stdin);
if(strncmp(buffer,"quit",4)==0)
{
break;
}
send(sockfd,buffer,N,0);
bzero(buffer,N);
recv(sockfd,buffer,N,0);
printf("receivefromtheserver>%s",buffer);
}
}
}
close(sockfd);
return0;

}

[/code]

运行:

运行了两个服务器:





客户端:





这样,通过在UDP中使用connect(),省去了每次都输入服务器地址的操作,而且一个在这种情况下,一个套接字在不关闭的情况下可以实现多次调用connect()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: