資源簡介
自己寫的Linux下使用UDP協議的點對點聊天程序(含源代碼),親測可用,由于UDP的原理,不能確定對方是否上線,不保證對方收到也不能知道對方是否能收到消息
代碼片段和文件信息
/*first?step?in?udp?programming*/
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define?BUFLEN?255
int?main(int?argcchar?**argv)
{
struct?sockaddr_in?peeraddrlocaladdr;
int?sockfd;
char?recmsg[BUFLEN+1]pushmsg[BUFLEN+1];
int?socklenn;
if(argc!=5){
printf(“%s????\n“argv[0]);
exit(0);
}
sockfd=socket(AF_INETSOCK_DGRAM0);
if(sockfd<0){
fprintf(stderr“socket?creating?error?in?udptalk.c!\n“);
exit(1);
}
socklen=sizeof(struct?sockaddr);
memset(&peeraddr0socklen);
peeraddr.sin_family=AF_INET;
peeraddr.sin_port=htons(atoi(argv[2]));
if(inet_pton(AF_INETargv[1]&peeraddr.sin_addr)<=0){
printf(“Wrong?dest?IP?address!\n“);
???? ? exit(0); }
memset(&localaddr0socklen);
localaddr.sin_family=AF_INET;
localaddr.sin_port=htons(atoi(argv[4]));
if(inet_pton(AF_INETargv[3]&localaddr.sin_addr)<=0){
printf(“Wrong?source?IP?address!\n“);
exit(0);
}
if(bind(sockfd(struct?sockaddr?*)(&localaddr)socklen)<0){
fprintf(stderr“bind?local?address?error?in?udptalk.c!\n“);
exit(2);
}
fcntl(0F_SETFL?O_NONBLOCK);
printf(“: “);
for(;;){
pushmsg[0]=0;
if(fgets(pushmsgBUFLENstdin)==“EOF“)exit(0);
if(pushmsg[0]!=0)if(sendto(sockfdpushmsgstrlen(pushmsg)0(struct?sockaddr?*)(&peeraddr)socklen)<0){
fprintf(stderr“sendto?error?in?udptalk.c!\n“);
perror(““);
exit(3);
}else?printf(“: “);
????????????????n=recvfrom(sockfdrecmsgBUFLENMSG_DONTWAIT(struct?sockaddr?*)(&peeraddr)(socklen_t*)&socklen);
????????????????if(n<0){
????????????????????????//fprintf(stderr“recvfrom?error?in?udptalk.c\n“);
????????????????????????//perror(““);
????????????????????????//exit(4);
????????????????}
????????????????else{
????????????????????????recmsg[n]=0;
????????????????????????printf(“\n%s#%d>>>:????????%s: “inet_ntoa(peeraddr.sin_addr)ntohs(peeraddr.sin_port)recmsg);
}
? }
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????220??2013-06-09?13:01??#V1.00R130608-130609Linux?UDP?Talk(talk)\README.txt
?????文件????????220??2013-06-09?13:01??#V1.00R130608-130609Linux?UDP?Talk(talk)\README.txt~
?????文件??????10244??2013-06-09?12:45??#V1.00R130608-130609Linux?UDP?Talk(talk)\talk
?????文件???????2086??2013-06-09?12:45??#V1.00R130608-130609Linux?UDP?Talk(talk)\talk.cpp
?????目錄??????????0??2013-06-09?13:01??#V1.00R130608-130609Linux?UDP?Talk(talk)
-----------?---------??----------?-----??----
????????????????12770????????????????????5
評論
共有 條評論