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

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值