您的位置:首页 > 运维架构 > Linux

LINUX 下,编程自学四:UDP通信(connect用于UDP)

2014-04-24 21:24 459 查看
service.c

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

#define PORT 5678

int main()
{
int sock;
struct sockaddr_in server;
struct sockaddr_in client;
size_t len;
char buf[100];
bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=htons(INADDR_ANY);

//create socket;
sock = socket(AF_INET,SOCK_DGRAM,0);
if(sock < 0)
{
perror("socket");
return -1;
}

//bind
if(bind(sock,(struct sockaddr *)&server,sizeof(server)) < 0)
{
perror("bind");
close(sock);
return -1;
}

while(1)
{
memset(buf,0,sizeof(buf));
len = sizeof(client);
if(recvfrom(sock,buf,99,0,(struct sockaddr *)&client,&len) < 0)
{
perror("recvfrom");
break;
}

printf("message:%s,client IP:%s,client PORT:%d\n",buf,inet_ntoa(client.sin_addr),htons(client.sin_port));

sendto(sock,"FIrst connect",16,0,(struct sockaddr *)&client,sizeof(client));

if(strcmp(buf,"bye") == 0)
break;
}
close(sock);
return 0;
}


client.c(注释部分为:非connect用于UDP)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>

#define PORT 5678

int main()
{
int sock;
struct sockaddr_in server;
struct sockaddr_in client;
char buf[100];
sock = socket(AF_INET,SOCK_DGRAM,0);
if(sock < 0)
{
perror("socket");
return -1;
}

//send
bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=inet_addr("127.0.0.1");

/*sendto(sock,"client connet",20,0,(struct sockaddr *)&server,sizeof(server));

size_t len;
len = sizeof(client);

while(1)
{
if(recvfrom(sock,buf,99,0,(struct sockaddr *)&client,&len) < 0)
{
perror("recvfrom");
close(sock);
return -1;
}

if(len != sizeof(server) )
{
printf("server IP :%s,message :%s\n",inet_ntoa(client.sin_addr),buf);
close(sock);
return 0;
}

printf("message = %s\n",buf);
}*/

//int connfd;
//connect(sock,(struct sockaddr *)&server,sizeof(server));
if(connect(sock,(struct sockaddr *)&server,sizeof(server)) < 0)
{
perror("sock");
close(sock);
return -1;
}

if(send(sock,"12345345",10,0) < 0)
{
perror("send");
// close(connfd);
close(sock);
}

if(recv(sock,buf,99,0) < 0)
{
perror("recv");
// close(connfd);
close(sock);
}

printf("message = %s\n",buf);
//close(connfd);
close(sock);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: