您的位置:首页 > 理论基础 > 计算机网络

UDP使用connect()

2017-11-21 20:57 441 查看
一般的UDP简单连接

在《TCP/IP网络实验程序篇》这本书中看到:

“在TCP/IP协议中,如果执行connect系统调用,则发送一个建立连接请求的SYN段。在UDP协议中也可以执行connect系统调用,但是,此时不传输任何一个包。在UDP协议中,如果执行一个connect系统调用,那么使用该套接字所进行的通信,只限定于与特定的对方(IP地址,端口号)进行通信。这样做的结果,并不需要每次都使用设定对方地址的sendto系统调用或者获得对方地址recvfrom系统调用,而只需要使用send或recv系统调用即可。”

试了一下:

client:#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>

#define MAXMSG 1024

int main()
{
int sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(sockfd < 0)
{
perror("socket");
exit(1);
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(6666);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(connect(sockfd,(struct sockaddr*)&addr,sizeof(addr)) == -1)
{
perror("connect");
exit(1);
}

char sendBuf[MAXMSG],recvBuf[MAXMSG];
while(fgets(sendBuf,MAXMSG,stdin) != NULL)
{
send(sockfd,sendBuf,strlen(sendBuf),0);
if(strcmp(sendBuf,"exit\n") == 0)
break;
recv(sockfd,recvBuf,MAXMSG,0);
printf("recv from server: %s\n",recvBuf);
}
return 0;
}


server:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>

#define MAXMSG 1024

int main()
{
int sockfd,nbytes;
sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(sockfd < 0)
{
perror("socket");
exit(1);
}
socklen_t size;
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(6666);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)) < 0)
{
perror("bind");
exit(1);
}

char message[MAXMSG];
while(1)
{
size = sizeof(addr);
int len = recvfrom(sockfd,message,MAXMSG,0,(struct sockaddr*)&addr,&size);
if(len < 0)
{
perror("recvfrom");
exit(1);
}
if(strcmp(message,"exit\n") == 0)
break;
printf("recvfrom client: %s\n",message);
sendto(sockfd,message,len,0,(struct sockaddr*)&addr,size);
memset(message,0,sizeof(message));
}
close(sockfd);
return 0;
}

client的addr.sin_port其实记录的是client要通信的server的端口号,IP地址也是server端的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  udp 通信 网络