linux下c編程之UDP

1、服務器端

創建socket。

綁定服務器端口和IP。

接收數據、發送數據。發送數據需要根據接收數據的地址或者自己指定發送地址。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
	int sockfd,tmplen;
	struct sockaddr_in saddr,caddr;
	char *sndata,buf[1024];

	tmplen = sizeof(struct sockaddr_in);	

	//create socket
	if((sockfd=socket(AF_INET,SOCK_DGRAM,0)) == -1)
		exit(0);

	//init ip and port
	saddr.sin_family = AF_INET;
	saddr.sin_port = htons(8888);
	saddr.sin_addr.s_addr = htonl(INADDR_ANY);
	if(bind(sockfd,(struct sockaddr *)(&saddr),tmplen) == -1)
		exit(0);

	while(1)
	{
		recvfrom(sockfd,buf,1024,0,(struct sockaddr *)(&caddr),&tmplen);
		//printf("%s\n",buf);
		sndata = inet_ntoa(caddr.sin_addr);
		sendto(sockfd,sndata,strlen(sndata),0,(struct sockaddr *)(&caddr),tmplen);
		
	}
	return 0;
}


2、客戶端

創建socket。

指定服務器地址和端口。

收發數據。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
	int sockfd,tmplen;
	struct sockaddr_in saddr,caddr;
	char buf[1024];

	tmplen = sizeof(struct sockaddr_in);	

	//create socket
	if((sockfd=socket(AF_INET,SOCK_DGRAM,0)) == -1)
		exit(0);

	//init ip and port
	saddr.sin_family = AF_INET;
	saddr.sin_port = htons(8888);
	saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	
	sendto(sockfd,"hello",5,0,(struct sockaddr *)(&saddr),tmplen);
	recvfrom(sockfd,buf,1024,0,(struct sockaddr *)(&saddr),&tmplen);
	printf("%s\n",buf);
	
	return 0;
}



3、注意事項

tmplen = sizeof(struct sockaddr_in);

sendto(sockfd,"hello",5,0,(struct sockaddr *)(&saddr),tmplen);

recvfrom(sockfd,buf,1024,0,(struct sockaddr *)(&saddr),&tmplen);//黑體處的區別

socket(AF_INET,SOCK_DGRAM,0)//黑體處與TCP通信的SOCK_STREAM的區別


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章